动态更新spark kafka consumer

时间:2016-12-19 11:55:05

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

我在我的spark流应用程序中使用createDirectStream。我将批处理间隔设置为7秒,批处理作业大部分时间可以在大约5秒内完成。但是,在极少数情况下,批处理作业需要花费60秒,这将延迟一些作业。 为了减少总延迟时间,我希望我能够处理更多的流数据,这些数据一次遍布延迟的作业。这将有助于流媒体尽快恢复正常。

所以,我想知道有一些方法可以在出现延迟时动态更新/合并spark和kafka的输入批量大小。

1 个答案:

答案 0 :(得分:0)

您可以设置" spark.streaming.backpressure.enabled"选项为true。

如果在backpressure选项为true时发生批处理延迟,则它最初以较小的批量大小开始,然后动态更改为较大的批量大小。

See the spark configuration document.

您可以看到以下说明。

  

启用或禁用Spark Streaming的内部背压机制   (自1.5起)。这使Spark Streaming能够控制接收   基于当前批量调度延迟和处理时间的速率   这样系统只能收到系统可以处理的速度。   在内部,这会动态设置最大接收速率   接收器。该比率受上限的限制   spark.streaming.receiver.maxRate和   如果设置了spark.streaming.kafka.maxRatePerPartition(见下文)。