我使用@StreamListener
消耗的Kafka
消息。
我已autoCommitOffset
到false
,并autoCommitOnError
到false
。
我将所有失败的消息也发送给DLQ主题,以获取失败的maxAttempt。我在测试更改时有一个问题。
如果我不确认已使用的消息并且也没有引发任何错误,将会发生什么?Kafka会在一段时间后自动发送邮件吗?
当我抛出错误时,重播会启动,并且重试直到我的maxAttempt配置和失败的消息转到DLQ主题。
让我知道Kafka支持是否重试,如果使用者没有抛出任何错误并且没有确认消息。
如果我不确认已使用的消息并且也没有引发任何错误,将会发生什么?Kafka会在一段时间后自动发送邮件吗?
没有; 除非您不再处理其他消息,否则即使重新启动应用程序,也只能重新交付。
Kafka不会“确认”离散消息。它只是将最后处理的偏移量存储在分区中。
还有一个问题。使用DLQ主题时,是否有任何方法可以确认发送到DLQ主题的消息。当前发送到DLQ主题的消息在生产者端未得到确认,因此存在重复消息(消费者主题和DLQ主题)
请参阅stackoverflow.com/help/someone-answers。我们最近在兔子活页夹中添加了类似的功能(使用手动ack的ack DLQ消息)。对于Kafka来说,这不是问题,因为下一个成功处理的分区消息将由侦听器代码提交(大概)偏移量。这有效地提交了失败记录的偏移量。如果您认为活页夹应确认DLQ消息,请在GitHub中打开一个问题。