Spark Direct Stream 不会为每个 kafka 分区创建并行流
Posted
技术标签:
【中文标题】Spark Direct Stream 不会为每个 kafka 分区创建并行流【英文标题】:Spark Direct Stream is not creating parallel streams per kafka partition 【发布时间】:2017-04-23 06:00:51 【问题描述】:我们在集成 Spark-Kafka 流时面临性能问题。
项目设置: 我们使用具有 3 个分区的 Kafka 主题,并在每个分区中生成 3000 条消息,并在 Spark 直接流中对其进行处理。
我们面临的问题: 在处理端,我们使用 Spark 直接流方法来处理相同的内容。根据以下文档。 Spark 应该创建与主题中的分区数一样多的并行直接流(在本例中为 3)。但是在阅读时,我们可以看到来自分区 1 的所有消息首先得到处理,然后是第二个,然后是第三个。任何帮助为什么它不处理并行?根据我的理解,如果它同时从所有分区并行读取,那么消息输出应该是随机的。
http://spark.apache.org/docs/latest/streaming-kafka-0-8-integration.html#approach-2-direct-approach-no-receivers
【问题讨论】:
但在阅读时,我们可以看到来自分区 1 的所有消息首先得到处理,然后是第二个,然后是第三个。你怎么看? 【参考方案1】:您是否尝试设置 spark.streaming.concurrentJobs 参数。 可能是你的情况,可以设置为三个。
sparkConf.set("spark.streaming.concurrentJobs", "3").
谢谢。
【讨论】:
我不确定你是否解决了这个问题。但是我们使用“spark.streaming.kafka.maxRatePerPartition”标志解决了它。如您所提到的,如果不设置此标志,则默认行为完全相同。一旦我们将此标志设置为 100 条消息,我们可以看到分区是并行处理的。以上是关于Spark Direct Stream 不会为每个 kafka 分区创建并行流的主要内容,如果未能解决你的问题,请参考以下文章
Spark Streaming 基于 Direct API 优化与 Kafka 集成
Spark Streaming 基于 Direct API 优化与 Kafka 集成
spark Spark Streamingkafka数据源Direct模式 自定义数据源