常见误解
启用 Kafka EOS 后,很多团队默认“不会重复消费”。实际上,数据库写入、HTTP 调用等外部副作用仍可能重复。
EOS 真正保证什么
- Producer 端幂等写入(同一会话内去重)。
- 事务内“写输出 + 提交消费位点”原子性。
- 只在 Kafka 生态内部有效。
仍需业务补齐
- 下游写库使用幂等键(业务主键或事件 ID)。
- 外部调用提供去重令牌。
- 失败重试具备可重入语义。
处理流程建议
consume -> validate -> execute(idempotent) -> produce -> commit offsets
任何一步失败都可重试,且不会造成不可逆双写。
小结
EOS 不是银弹,而是基础设施层的“至少一次到一次”的收敛器。业务副作用一致性仍需你自己设计。