假设一个主题有 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 完全失败。
有可能吗?如果是,那么使用消息和更新插入数据库的简单方法可能不安全。
答案 0 :(得分:1)
Consumer A 认为 Consumer B 已经死了,决定从分区 1 重新平衡和消费。它得到消息:X、Y、Z(按顺序)然后写入数据库
好的,假设它也为每条消息提交偏移量。
如果 B 开始备份,它将开始读取 最近提交的值之后的偏移量,并且不会重新读取它之前尝试过的数据,除非消费者手动寻找到该位置.