Kafka Exactly-Once 的边界:事务语义与业务幂等如何配合

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

2026年5月7日 · 1 分钟 · BvBeJ

Go Kafka Consumer:重平衡期间的可用性设计

背景 扩缩容、实例重启、网络波动都会触发 rebalance。处理不好就会出现消费停顿、重复处理和延迟暴涨。 实践要点 处理逻辑幂等化 offset 提交时机明确 重平衡回调里做好 flush for msg := range claim.Messages() { if err := handle(msg); err == nil { session.MarkMessage(msg, "") } } 总结 消费者稳定性的上限,取决于你对 rebalance 的设计,而不是对“正常流量”的设计。 消息系统里,异常路径才是主路径。

2026年5月4日 · 1 分钟 · BvBeJ