具有@KafkaListener批注的kafka消费者如何处理max.poll.records

时间:2020-02-21 19:08:19

标签: spring-kafka

我正在使用spring boot 2.1.7.RELEASE和spring-kafka 2.2.7.RELEASE。并且我正在使用@KafkaListener注释创建使用者,并且正在使用该使用者的所有默认设置。

根据apache kafka文档,“ max.poll.records”的默认值为500。

在这里,我试图理解spring是如何处理记录处理的。现在我的问题是,如果我们已经在主题A上发布了500条消息,并且有一个消费者(使用@KafkaListener)订阅了该主题,则

  1. 这个Spring侦听器是否会获取所有那500条记录,然后进行某种类型的缓存,然后再将一条记录传递给@KafkaListener注释的方法,还是一次只提取一条记录并传递给该方法? @KafkaListener注释

1 个答案:

答案 0 :(得分:1)

@KafkaListener基于KafkaMessageListenerContainer,进而完全基于ConsumerRecords<K, V> org.apache.kafka.clients.consumer.Consumer.poll(Duration timeout) API。

您提到的选项与Spring for Apache Kafka无关。即使没有Spring,您也将处理相同的行为。

请参阅返回的ConsumerRecords,以获取更多有关如何从Kafka提取记录的信息。

使用Kafka,我们获取记录的方式并不重要。仅补偿提交很重要。 但这是另一回事。您需要自己了解Spring for Apache Kafka只是标准Kafka Client的包装。它没有意见如何从主题轮询记录。