使用Spark Streaming时限制Kafka批量大小

时间:2016-10-11 15:59:49

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

是否可以限制Kafka消费者为Spark Streaming返回的批次大小?

我在问,因为我得到的第一批记录有数亿条记录,处理和检查它们需要很长时间。

3 个答案:

答案 0 :(得分:23)

我认为您的问题可以通过 Spark Streaming Backpressure 来解决。

检查spark.streaming.backpressure.enabledspark.streaming.backpressure.initialRate

默认情况下spark.streaming.backpressure.initialRate 未设置且默认情况下spark.streaming.backpressure.enabled 已停用,因此我认为火花将尽可能多。< / p>

来自Apache Spark Kafka configuration

<强> spark.streaming.backpressure.enabled

  

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

由于你想要控制第一批,或者更具体 - 第一批消息的数量,我认为你需要spark.streaming.backpressure.initialRate

<强> spark.streaming.backpressure.initialRate

  

这是每个接收器的初始最大接收速率   在背压机制时接收第一批数据   启用。

当你的Spark工作(分别是Spark工作者)能够处理来自kafka的10000条消息时,这个很好,但是kafka经纪人会给你的工作提供100000条消息。

也许您还有兴趣通过Jeroen van Wilgenburg on his blog检查spark.streaming.kafka.maxRatePerPartition以及有关这些属性的一些研究和建议。

答案 1 :(得分:6)

除了上述答案。批量大小是3个参数的乘积

  1. batchDuration:将流数据分成批次的时间间隔(以秒为单位)。
  2. spark.streaming.kafka.maxRatePerPartition:设置每秒每个分区的最大邮件数。与batchDuration结合使用时,将控制批量大小。您希望设置maxRatePerPartition,并且大(否则您实际上会限制您的工作)并且batchDuration非常小。
  3. kafka主题中没有分区
  4. 为了更好地解释当背压启用/禁用(set spark.streaming.kafka.maxRatePerPartition for createDirectStream

    时该产品如何工作

答案 2 :(得分:0)

限制最大批处理大小将大大有助于控制处理时间,但是,这会增加邮件的处理延迟。

通过属性下面的设置,我们可以控制批量大小 spark.streaming.receiver.maxRate = spark.streaming.kafka.maxRatePerPartition =

您甚至可以通过启用反压力来根据处理时间动态设置批次大小 spark.streaming.backpressure.enabled:true spark.streaming.backpressure.initialRate: