同一个分区真的永远不会被一个组上的多个消费者同时消费吗?

时间:2021-06-20 03:17:47

标签: apache-kafka

假设一个主题有 2 个分区。 我们在同一组中有 2 个消费者,他们都从该主题消费:消费者 A 消费分区 0,消费者 B 消费分区 1。 消费者A是消费者组的组长。

此时,Consumer B 收到了一批来自该主题的消息,例如 message: X, Y。紧接着,Consumer B 停止了。

一段时间后,消费者A认为消费者B已死,决定从分区1重新平衡和消费。它获取消息:X、Y、Z(按顺序),然​​后写入数据库。

之后,Consumer B继续执行,不知道过了一段时间,继续写消息X,Y,覆盖了Z的效果。 然后消费者 B 完全失败。

有可能吗?如果是,那么使用消息和更新插入数据库的简单方法可能不安全。

1 个答案:

答案 0 :(得分:1)

<块引用>

Consumer A 认为 Consumer B 已经死了,决定从分区 1 重新平衡和消费。它得到消息:X、Y、Z(按顺序)然后写入数据库

好的,假设它也为每条消息提交偏移量

如果 B 开始备份,它将开始读取 最近提交的值之后的偏移量,并且不会重新读取它之前尝试过的数据,除非消费者手动寻找到该位置.