我找不到任何与这个问题相关的文档,因此出现了这个问题。
当ackMode
设置为MANUAL_IMMEDIATE
时,如果@KafkaListener
方法根本不调用acknowledgement.acknowledge()
,但成功退出该方法而没有任何异常,会发生什么情况?
我们在我们的一个消费者中遇到了这个问题,并丢失了消息(准确地说,偏移量已移动,因为我们从未调用过acknowledgement.acknowledge()
,所以我们预计偏移量不会移动),这是预期的行为吗?
问题here似乎解决了同样的问题,但从来没有收到关于当没有异常时会发生什么的答案,因为我认为错误处理程序和恢复器只有在抛出异常时才会起作用,而不是在消息未确认的情况下。
发布于 2020-11-04 22:45:53
Kafka维护了两个指针:提交的偏移量和当前位置。
如果不调用acknowledge()
并正常退出,提交的偏移量不会移动,但位置会移动;您将获得下一个poll()
上的下一个记录。
如果您重新启动应用程序,您将获得重新传送的相同记录。
您还必须将Kafka消费者属性enable.auto.commmit
设置为false
- spring-kafka (从2.3开始)会自动执行此操作,除非您已显式设置它。
https://stackoverflow.com/questions/64681806
复制相似问题