我正在使用 spring boot 2.1.7.RELEASE 和 spring-kafka 2.2.7.RELEASE。我正在使用 @KafkaListener 注释来创建消费者,并且我正在使用消费者的所有默认设置。
根据 apache kafka 文档,“max.poll.records”的默认值为 500。
在这里,我试图了解 Spring 如何处理记录处理。现在我的问题是,如果我们已经在主题 A 上发布了 500 条消息,并且有一个消费者(使用 @KafkaListener)订阅了该主题,
- 这个 Spring 监听器是否会获取所有这 500 条记录,然后在将一条记录传递给 @KafkaListener 注释的方法之前进行某种缓存,或者一次只提取一条记录并将其传递给带有 @KafkaListener 注释的方法@KafkaListener注解
最佳答案
@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 客户端的包装。它没有对如何从主题中轮询记录提出意见。
关于spring-kafka - 带有 @KafkaListener 注解的 kafka 消费者如何处理 max.poll.records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60344864/