我的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?
答案 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
具有更自适应的速率可能会很有用。