如何增加在Spark Streaming / Kafka中处理某个阶段的执行程序的数量?

时间:2018-08-28 03:45:42

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

我正在尝试使用Spark Streaming Direct方法从Kafka(1个主题,5个分区)读取数据。为了增加处理数据的并行度,我设置了Dstream.repartition(60)。但是,似乎每批流的每个阶段中只有5个执行程序正在运行?

我已经设置了以下参数:

--num-executors 20 
--executor-cores 4
--executor-memory 3G
--driver-memory 3G
--spark.default.Parallelism 60

我的困惑是:
我想减少处理时间,所以我尝试增加Vcores的数量,但是这种方法似乎不起作用。为什么?谢谢。

1 个答案:

答案 0 :(得分:2)

  

(1个主题,5个分区)使用Spark Streaming Direct方法。...似乎只有5个执行程序正在运行

这就是您要获得的全部。每个主题分区最多只能有一个使用者。

获得Spark(或任何Kafka Consumer组)的唯一方法是扩展更多执行者,是对主题本身进行重新分区,这与在Spark中重新分区是不同的术语

注意:可以增加主题的分区数,但是对于重新分区之前最后写入的消息,主题的保留策略的消息键将不再是一对一的

重新分配主题之后,我相信您必须重新启动Spark应用程序,因为它不会动态获取新的主题数据