繁体   English   中英

卡夫卡:在消费者完成从某个主题的阅读之前,如果连接中断,会发生什么情况?

[英]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中处理并增加其偏移量。依此类推。

那么在中断中读期间会发生什么呢?

在此中断期间,有一个事件时间表可供考虑:

  1. 消费者根据其偏移量请求主题中的下一项。
  2. 消费者开始阅读主题中的下一项。
  3. 消费者完成阅读主题中的项目。
  4. 消费者处理主题中的项目。
  5. 消费者在__consumer_offsets主题中更新其偏移量。
  6. 回到1。

4 之前(包括 4发生的任何错误都将导致简单的重新请求和重新处理。 这意味着,如果您的使用者是有状态的,则需要处理一半的事务。

4完成但5未完成后发生的错误将不会导致重新处理。 相反,它将重新建立连接,更新偏移量并处理下一项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM