apache-spark - Spark 流 + Kafka 与 Just Kafka

标签 apache-spark apache-kafka spark-streaming spark-streaming-kafka

为什么以及何时会选择将 Spark 流与 Kafka 一起使用?

假设我有一个系统每秒通过 Kafka 获取数千条消息。我需要对这些消息应用一些实时分析并将结果存储在数据库中。

我有两个选择:

  • 创建我自己的工作程序,从 Kafka 读取消息,运行分析算法并将结果存储在数据库中。在 Docker 时代,只需使用 scale 命令就可以轻松地在我的整个集群中扩展这个 worker。我只需要确保我的分区数量等于或大于我的 worker ,一切都很好,我有真正的并发性。
  • 使用 Kafka 流输入创建 Spark 集群。让 Spark 集群进行分析计算,然后存储结果。

  • 是否有第二种选择是更好的选择的情况?在我看来,这只是额外的开销。

    最佳答案

    In a Docker era it is easy to scale this worker through my entire cluster



    如果您已经拥有可用的基础设施,那就太好了,使用它。将您的 Kafka 库捆绑在一些带有运行状况检查的最小容器中,但在大多数情况下,它可以正常工作。添加 Kafka 客户端依赖项 + 数据库依赖项是您真正需要的,对吗?

    如果您不使用 Spark、Flink 等,您将需要更密切地处理 Kafka 错误、重试、偏移和提交处理,而不是让框架为您处理这些。

    我将在这里补充一点,如果您想要 Kafka + 数据库交互,请查看 Kafka Connect API。已有针对 JDBC、Mongo、Couchbase、Cassandra 等的现有解决方案。

    如果你需要更完整的处理能力,我会选择 Kafka Streams 而不是需要单独维护一个 Spark 集群,所以这就是“只是 Kafka”

    Create a Spark cluster



    假设您不想维护它,或者您无法在 YARN、Mesos、Kubernetes 或 Standalone 之间进行选择。如果您正在运行前三个,那么无论如何可能值得考虑在它们上运行 Docker。

    您完全正确,它是额外的开销,所以我发现这完全取决于您可用的资源(例如,具有空闲内存资源的现有 Hadoop/YARN 集群),或者您愿意在内部支持(或支付对于供应商服务,例如某些托管解决方案中的 Kafka 和 Databricks)。

    另外,Spark 没有运行最新的 Kafka 客户端库(我相信直到 2.4.0 更新到 Kafka 2.0),所以你需要确定这是否是一个卖点。

    对于实际的流库,而不是 Spark 批处理,Apache Beam 或 Flink 可能会让您针对 Kafka 执行相同类型的工作负载

    通常,为了扩展生产者/消费者,您需要某种形式的资源调度程序。安装 Spark 对某些人来说可能并不困难,但知道如何有效地使用它并调整适当的资源可能是

    关于apache-spark - Spark 流 + Kafka 与 Just Kafka,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262926/

    相关文章:

    amazon-web-services - 如何将 Spark jar 提交到 EMR 集群?

    java - 如何在 1 周后准确处理来自分布式日志代理(例如 Kafka)的日志?

    apache-kafka - Kafka 消费者组中只有一个消费者获取消息

    apache-kafka - 在多个节点上运行kafka connect分布式模式

    apache-spark - Kafka 主题分区到 Spark 流

    apache-spark - 避免排队 Spark 微批处理

    scala - 在 Spark Streaming 中,有没有办法检测批处理何时完成?

    scala - UDF 在 Scala 中按键过滤 map

    apache-spark - Spark KMeans 聚类 : get the number of sample assigned to a cluster

    amazon-ec2 - 非法参数异常 :/tmp/zookeeper/myid file is missing