Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheKafka-手动确认(AbstractMessageListenerContainer.AckMode.manual)不工作,在库升级时重播事件_Java_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Java ApacheKafka-手动确认(AbstractMessageListenerContainer.AckMode.manual)不工作,在库升级时重播事件

Java ApacheKafka-手动确认(AbstractMessageListenerContainer.AckMode.manual)不工作,在库升级时重播事件,java,apache-kafka,kafka-consumer-api,spring-kafka,Java,Apache Kafka,Kafka Consumer Api,Spring Kafka,卡夫卡事件被反复播放给消费者。我可以看到以下例外情况- 5-Nov-2019 10:43:25 ERROR [org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run : 685] :: org.springframework.kafka.KafkaListenerEndpointContainer#2-0-C-1 :: :: Container exception org.apa

卡夫卡事件被反复播放给消费者。我可以看到以下例外情况-

5-Nov-2019 10:43:25 ERROR [org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run : 685] :: org.springframework.kafka.KafkaListenerEndpointContainer#2-0-C-1 ::  :: Container exception
org.apache.kafka.clients.consumer.CommitFailedException: 
Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. 
This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. 
You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.
但在我的例子中,只有一条消息需要30多分钟才能处理,所以我们在收到时会确认它。所以我不认为记录数量是个问题。我知道可以通过增加max.poll.interval.ms来解决这个问题,但它在升级之前是可以工作的。试图找出最佳解决方法

尝试使用AbstractMessageListenerContainer.AckMode.MANUAL\u IMMEDIATE似乎可以立即提交偏移量并正常工作,但我需要找出AbstractMessageListenerContainer.AckMode.MANUAL现在失败的原因

以前的工作jar版本: spring-kafka-1.0.5.RELEASE.jar 卡夫卡客户端-0.9.0.1.jar

当前版本(获取上述异常): spring-kafka-1.3.9.RELEASE.jar
kafka-clients-2.2.1.jar
是的,您必须增加
max.poll.interval.ms
;您可以使用MANUAL_IMMEDIATE来立即提交偏移量(使用MANUAL,提交被排队,直到线程退出侦听器才执行实际提交)

但是,这仍然不会阻止重新平衡,因为Kafka要求消费者在
max.poll.interval.ms
内调用
poll()

因此,我建议您立即切换到手动,并将间隔时间增加到30分钟以上


在旧版本(1.3之前)中,有两个线程—一个用于使用者,一个用于侦听器,因此排队的ack会更早处理。但是这是一个非常复杂的线程模型,由于KIP-62,它在1.3中被大大简化了,但是这个副作用就是结果。

您是否检查了旧版本中
max.poll.interval.ms
的值?在某个阶段,kafka将其默认为Integer.max。在以前使用的版本中,没有属性max.poll.interval.ms。在新的一个是5分钟。但我们正在确认message receive,因此不确定此属性是否会导致它感谢您的回答。但我观察到的是-在确认手动即时后,切换到手动即时而不更改max.poll.interval.ms和消息处理大约需要20分钟,我们没有观察到任何重新平衡或再次发送给consumerI的消息。我试图解释,而偏移量将正确提交,在下一次投票中,你仍然会经历不必要的重新平衡。请阅读KIP-62-