Spring boot Spring Kafka使用消费者已经使用的旧消息

Spring boot Spring Kafka使用消费者已经使用的旧消息,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,我有一个SpringBoot应用程序,使用SpringKafka。我们已经创建了一个消费者,它正在消费来自4个主题的消息。这些主题没有任何分区。我在这里面临的问题是三个主题中的一个rendom行为,在任何一个主题偏移量停止时,我的消费者会一次又一次地消费来自该主题的相同消息,直到我们需要手动将偏移量移动到最新。下面是我的配置YAML配置: spring: 卡夫卡: 消费者: 引导服务器:${KAFKA_引导服务器} 组id:组\u id 密钥反序列化程序:org.apache.kafka.com

我有一个SpringBoot应用程序,使用SpringKafka。我们已经创建了一个消费者,它正在消费来自4个主题的消息。这些主题没有任何分区。我在这里面临的问题是三个主题中的一个rendom行为,在任何一个主题偏移量停止时,我的消费者会一次又一次地消费来自该主题的相同消息,直到我们需要手动将偏移量移动到最新。下面是我的配置YAML配置:

spring:
卡夫卡:
消费者:
引导服务器:${KAFKA_引导服务器}
组id:组\u id
密钥反序列化程序:org.apache.kafka.common.serialization.StringDeserializer
值反序列化程序:org.apache.kafka.common.serialization.StringDeserializer
卡夫卡:
消费者:
allTopicList:user.topic,student.topic,class.topic,teachers.topic**
由于它是一个Spring引导应用程序,所以默认偏移量设置为latest。
我在这里做错了什么,请帮助我理解。

您使用的是什么版本

你应该设置

...consumer:
     enable-auto-commit: false
侦听器容器将更可靠地提交偏移量

你也应该考虑

     ack-mode: RECORD

容器将为每个成功处理的记录提交偏移量(默认为批处理)。

您使用的是什么版本

你应该设置

...consumer:
     enable-auto-commit: false
侦听器容器将更可靠地提交偏移量

你也应该考虑

     ack-mode: RECORD

并且容器将提交每个成功处理记录的偏移量(默认为批处理)。

谢谢Gary,我使用的是spring boot starter父版本-2.1.7.RELEASE,它在内部使用kafka-clients-2.0.1如果您无法升级到boot 2.2,那么您至少应该升级到boot 2.1.13,它将spring kafka 2.2.12引入(与kafka clients 2.0.1相同)。Gary i进行了更改,但在我的应用程序的一个实例(两个实例中的一个)的日志中得到以下消息:提交无法完成,因为组已重新平衡并将分区分配给另一个成员。这意味着后续轮询()调用之间的时间比配置的session.timeout.ms长,这通常意味着轮询循环在消息处理上花费了太多时间。您可以通过增加会话超时或减少poll()中返回的批的最大大小来解决此问题对于max.poll.records.org.apache.kafka.clients.consumer.commitfailedexception,这意味着您的代码无法足够快地处理轮询接收到的记录;您需要减少
max.poll.records
或增加
max.poll.interval.ms
(或两者兼而有之)。谢谢Gary,我使用的是spring boot starter父版本-2.1.7.RELEASE,它在内部接受kafka-clients-2.0.1。如果您无法升级到boot 2.2,您至少应该升级到boot 2.1.13,该版本支持spring kafka 2.2.12(与kafka clients 2.0.1相同)。Gary i进行了更改,但在一个实例中(共两个实例)的日志中显示以下消息我的应用程序:无法完成提交,因为组已重新平衡分区并将其分配给另一个成员。这意味着后续调用poll()之间的时间比配置的session.timeout.ms长,这通常意味着轮询循环在消息处理上花费了太多时间。您可以通过增加会话超时或减少poll()中返回的批的最大大小来解决此问题对于max.poll.records.org.apache.kafka.clients.consumer.commitfailedexception,这意味着您的代码无法足够快地处理轮询接收到的记录;您需要减少
max.poll.records
或增加
max.poll.interval.ms
(或两者兼而有之)。