如果消费者开始阅读某个主题,然后在消费者完成阅读之前互联网连接断开,会发生什么?仍然保留有关该主题的消息吗?卡夫卡如何处理这种情况?
答案 0 :(得分:4)
通常,队列使用者跟踪明确的确认。也就是说,消费者说“谢谢,我已经处理了”,服务器说“不客气”。
Kafka通过存储偏移量处理此问题。偏移量是使用者在流中的位置。例如,假设我有一个包含四个元素的流。
A, B, C, D
第一个位置的位置是A
,因此,偏移量为0
的消费者将拉动A
。处理完A
后,他们会将其偏移量更新为1
。通常将其存储在__consumer_offsets
主题的经纪人端。
当它们的偏移量变为1
时,他们得到下一个,即B
。他们在__consumer_offsets
主题2中进行处理并增加其偏移量。依此类推。
那么在中断中读取期间会发生什么?
在此中断期间有一个事件时间表要考虑:
__consumer_offsets
主题中更新其偏移量。在之前(包括)4
发生的任何错误都将导致简单的重新请求和重新处理。这意味着如果您的消费者是有状态的,您将需要处理一半的事情。
4
完成但5
未完成之后发生的错误将否导致重新处理。相反,它将重新建立连接,更新偏移量并处理下一项。