kafka max.poll.records在Spark Streaming中不起作用

时间:2018-09-27 01:05:04

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

我的Spark Streaming版本是2.0,kafka版本是0.10.0.1,spark-streaming-kafka-0-10_2.11。   我使用直接方式获取kafka记录,现在我想限制我批量获取的最大邮件数。因此我设置了max.poll.records值,但是它不起作用。    spark中的使用者数是kafka中的分区数?因此spark流中的最大记录数是max.poll.records * consumers?

1 个答案:

答案 0 :(得分:0)

max.poll.records控制从轮询返回的记录数的上限。

在流式传输中,一批中可能会进行多次轮询。在这种情况下,max.poll.records不会很有用。根据{{​​3}}

,您应该使用spark.streaming.kafka.maxRatePerPartition
  

一个重要的是spark.streaming.kafka.maxRatePerPartition,它是此直接API读取每个Kafka分区的最大速率(每秒的消息数)

因此每批次的最大记录数为

  

(spark.streaming.kafka.maxRatePerPartition)*(批处理持续时间,以秒为单位)*(kafka分区数)

例如,如果您在该主题中有2个分区,批处理时间为30秒,spark.streaming.kafka.maxRatePerPartition为1000,则每个批处理将看到6000(2 * 30 * 1000)条记录。

根据处理批处理的时间,使spark.streaming.backpressure.enabled具有更自适应的速率可能会很有用。

documentation