我正在与Kafka进行一些POC工作,并且正在使用事务性API研究一次功能,但仍然存在一些问题。如果使用者在处理消息之后但在提交偏移之前崩溃了,该怎么办?下一轮运行似乎不可避免地从错误的消息开始,并且重复的消息将通过。如何处理这种情况?
答案 0 :(得分:4)
如果消费者在处理消息之后但在提交偏移之前崩溃了,会发生什么?
Kafka: Definitive Guide提到一个选项,如果消息处理涉及将消息写入数据库,我们也可以将处理后的偏移量写入数据库,并在恢复阶段通过查找(seek())来使用该偏移量。我们要从Kafka轮询的偏移量。
也就是说,您可以在每条消息中都有一个唯一的标识符,以便使用者可以检查消息是否已被处理过。 (重复处理)应始终在使用者代码中实现。