【问题标题】:Spark Streaming and Kafka: one cluster or several standalone boxes?Spark Streaming 和 Kafka:一个集群还是几个独立的盒子?
【发布时间】:2016-04-07 19:46:44
【问题描述】:

我正在决定是否使用 Spark-Streaming Kafka 集成。

我有一个 Kafka 主题(我可以将其分解为几个主题),每分钟排队几十万条消息,我的 spark 流应用程序通过应用转换来摄取消息,然后更新 UI。

知道所有故障都得到处理并在 Kafka 中复制数据,实现 Spark Streaming 应用程序以实现最佳性能和稳健性的最佳选择是什么:

  1. 一个 Kafka 主题和一个 Spark 集群。
  2. 几个 Kafka 主题和几个独立的 Spark 盒子(一台机器,每个主题都有独立的 Spark 集群)
  3. 几个 Kafka 主题和一个 Spark 集群。

我很想选择第二个选项,但我找不到人们谈论这样的解决方案。

【问题讨论】:

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


    【解决方案1】:

    选项 1 直截了当、简单且可能更有效。如果您的要求得到满足,那就是您的理想选择(并遵守 KISS 原则)。

    【讨论】:

    • 感谢 Atul,据我所知,Kafka 与 Spark Streaming 的集成仍处于试验阶段(至少是我使用的直接方法spark.apache.org/docs/latest/…),Spark 驱动程序可能是一个弱点到系统。那么为什么在这种情况下选项 2 不是更好呢?顺便说一句,什么是 KISS 原则?
    • @Rami 随着 spark 1.5 及更高版本,最可怕的 kafka-spark 流式传输已为 scala 和 java 客户端做好了生产准备。因此,如果这是您选择的语言,那么就没有问题。第二个问题,请参考people.apache.org/~fhanik/kiss.html
    • 嗨 Atul,如果您阅读 Spark 文档 (1.5.2) spark.apache.org/docs/latest/streaming-kafka-integration.html,他们在开始时说该功能仍处于试验阶段:“有两种方法 - 使用接收器的旧方法和Kafka 的高级 API,以及不使用接收器的新实验方法(在 Spark 1.3 中引入)。
    【解决方案2】:

    在这种情况下要考虑的一个重要因素是主题的划分。

    您的 Kafka-Spark 集成的并行度级别将取决于主题的分区数。直接 Kafka 模型通过在主题的分区数和对应 Spark 作业的 RDD 分区之间建立 1:1 的映射来简化消费模型。

    因此,建议的设置是:一个具有 n 个分区的 Kafka 主题(其中 n 已针对您的用例进行了调整)和一个具有足够资源以并行处理来自这些分区的数据的 Spark 集群。

    选项 #2 感觉就像是在尝试重新实现 Spark 为您提供的开箱即用功能:Spark 为您提供弹性分布式计算。选项 #2 尝试在多台机器上并行化有效负载,并通过拥有独立的执行程序来处理故障。您可以使用单个 Spark 集群来实现这一目标,同时提高资源使用率和单一部署。

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2021-02-28
      • 1970-01-01
      • 2017-04-25
      • 2019-06-08
      相关资源
      最近更新 更多