Spark Streaming和Kafka:一个集群还是几个独立的盒子?

时间:2016-01-04 08:18:21

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

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

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

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

  1. 一个Kafka主题和一个Spark群集。
  2. 几个Kafka主题和几个独立的Spark盒子(一个机器,每个主题都有独立的火花簇)
  3. 几个Kafka主题和一个Spark群集。
  4. 我很想去寻找第二种选择,但我找不到人们在谈论这样的解决方案。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

选项1是直接的,简单的,可能更有效。如果您的要求得到满足,那就是要求(并遵守KISS原则)。