如果消费者开始阅读某一主题,然后互联网连接在用户完成阅读之前就中断了,会发生什么情况?关于这一主题的信息是否仍然存在?卡夫卡是如何处理这种情景的?
发布于 2019-02-15 20:52:21
通常,队列使用者跟踪显式确认。也就是说,一个消费者说“谢谢,我已经处理过了”,服务器说“不客气”。
卡夫卡通过存储一个偏移量来处理这个问题。偏移量是用户在流中的位置。例如,假设我有一个包含四个元素的流。
A, B, C, D第一个位置是A,因此一个偏移量为0的消费者将拉出A。一旦他们处理了A,他们就会将其偏移量更新为1。通常的做法是将其存储在代理端的__consumer_offsets主题中。
当它们的偏移量变成1时,它们得到下一个,即B。它们在__consumer_offsets主题中处理和增加它们的偏移量,等等。
,那么在中途阅读时会发生什么呢?
在这次停运期间,有一个事件的时间表需要考虑:
__consumer_offsets主题中更新其偏移量。发生在之前并包含 4的任何错误都会导致简单的重新请求和重新处理。这意味着,如果您的消费者是有状态的,您将需要处理一半处理的东西。
在4完成但5尚未完成后发生的错误将导致重新处理而不是。相反,它将重新建立连接,更新偏移量并处理下一项。
https://stackoverflow.com/questions/54714319
复制相似问题