我正在尝试使用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
的数量,但是这种方法似乎不起作用。为什么?谢谢。
答案 0 :(得分:2)
(1个主题,5个分区)使用Spark Streaming Direct方法。...似乎只有5个执行程序正在运行
这就是您要获得的全部。每个主题分区最多只能有一个使用者。
获得Spark(或任何Kafka Consumer组)的唯一方法是扩展更多执行者,是对主题本身进行重新分区,这与在Spark中重新分区是不同的术语
注意:可以增加主题的分区数,但是对于重新分区之前最后写入的消息,主题的保留策略的消息键将不再是一对一的
重新分配主题之后,我相信您必须重新启动Spark应用程序,因为它不会动态获取新的主题数据