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

How a kafka consumer with @KafkaListener annotation handles max.poll.records

我正在使用 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 注释的方法

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

您提到的选项与 Apache Kafka 的 Spring 无关。即使没有 Spring.

,您也会处理相同的行为

查看返回的 ConsumerRecords 了解如何从 Kafka 获取记录的更多信息。

有了 Kafka,我们如何获取记录真的无关紧要。只有偏移量提交很重要。 但那是另外一回事了。您需要自己了解 Apache Kafka 的 Spring 只是标准 Kafka 客户端的包装器。它没有对如何从主题中轮询记录发表意见。