自动提交功能已关闭的Kafka未确认邮件

时间:2018-12-18 19:28:29

标签: apache-kafka kafka-consumer-api

当前在我的kafka用户中,我关闭了自动提交,因此当前,例如,当邮件处理失败时:三则无效邮件,手动确认失败,延迟增加到三。

主题分区电流偏移日志记录结束偏移滞后
订单0 35 38 3

此后,如果通过了新的传入有效消息,并且该消息的处理成功完成,则将其手动确认并 那个消费者看起来像这样

主题分区电流偏移日志记录结束偏移滞后
订单0 39 39 0

当未成功处理偏移量为36、37、38的消息时,为什么消费者将电流偏移量设置为39 而且他们再也不会被同一位消费者再次阅读

任何人都可以解释这种行为吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

在Kafka中,消费者不会确认每条消息。相反,他们确认(提交)他们处理的最后一条消息的偏移量。

例如,如果您提交偏移量15,则隐式意味着您已经处理了0到15之间的所有消息。同样,在提交15时,您会覆盖以前的所有提交,因此您无法知道之前是否提交了13或14。

我建议您阅读有关此概念的文档中的Consumer Position部分。

关于后处理,Kafka提供了一些选项。当遇到处理故障时,在轮询更多消息并处理新记录之前,您可以尝试重新处理该消息。另一种选择是将其忽略为无效并继续(您当前正在做什么)。

另一方面,您可以通过运行Streams作业将有效消息传递到选中的主题并将不良消息转发到DLQ,以确保数据良好。然后从这个选中的主题中消费,您知道自己只有好的信息。参见validation for kafka topic messages