是否可以限制Kafka消费者为Spark Streaming返回的批次大小?
我在问,因为我得到的第一批记录有数亿条记录,处理和检查它们需要很长时间。
答案 0 :(得分:23)
我认为您的问题可以通过 Spark Streaming Backpressure 来解决。
检查spark.streaming.backpressure.enabled
和spark.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个参数的乘积
batchDuration
:将流数据分成批次的时间间隔(以秒为单位)。spark.streaming.kafka.maxRatePerPartition
:设置每秒每个分区的最大邮件数。与batchDuration
结合使用时,将控制批量大小。您希望设置maxRatePerPartition
,并且大(否则您实际上会限制您的工作)并且batchDuration
非常小。为了更好地解释当背压启用/禁用(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: