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模式 自定义数据源

flink和spark stream等框架的对比

Spark 学习笔记之 Streaming和Kafka Direct

Spark Kafka 基于Direct自己管理offset