[英]Kafka: What happens when the connection is interrrupted before consumer finishes reading from a topic?
如果消费者开始阅读某个主题,然后在消费者完成阅读之前互联网连接断开,会发生什么? 仍然保留有关该主题的消息吗? 卡夫卡如何处理这种情况?
通常,队列使用者跟踪显式的确认 。 也就是说,消费者说“谢谢,我已经处理了”,服务器说“不客气”。
Kafka通过存储offset来处理此问题。 偏移量是使用者在流中的位置。 例如,假设我有一个包含四个元素的流。
A, B, C, D
在位置1是A
,因此偏移量为0
的使用者将拉动A
一旦处理完A
,他们就会将其偏移量更新为1
。 通常将其存储在__consumer_offsets
主题的代理端。
当它们的偏移量变为1
,它们得到下一个,即B
他们在__consumer_offsets
主题2中处理并增加其偏移量。依此类推。
那么在中断中读期间会发生什么呢?
在此中断期间,有一个事件时间表可供考虑:
__consumer_offsets
主题中更新其偏移量。 在 4
之前(包括 4
发生的任何错误都将导致简单的重新请求和重新处理。 这意味着,如果您的使用者是有状态的,则需要处理一半的事务。
4
完成但5
未完成后发生的错误将不会导致重新处理。 相反,它将重新建立连接,更新偏移量并处理下一项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.