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

标签 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 注释的方法@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/

相关文章:

java - 如何使用spring在kafka中创建两个接受不同数据类型的生产者kafka模板,一个是JsonNode,另一个是Avro?

apache-kafka - 在数据库和 Kafka 生产者之间同步事务

apache-kafka-streams - Tombstone 消息没有从 KTable 状态存储中删除记录?

spring-boot - 如何重试来自 kafka 的失败消息?

java - 为 spring-cloud-bus 设置zookeeper主机和端口

java - 在 REST 端点中流式传输 Kafka 消息

java - 我如何在内存或嵌入式 kafka 中实现而不是为了测试目的?

java - Spring @KafkaListener 和并发

apache-kafka - 将无法反序列化的消息发布到DLT主题

java - Kafka消费者未加入自定义groupId