【背景】
去年我们做订单履约链路,Kafka 3.5(KRaft,3 broker),核心路径:
订单创建 → 写 MySQL → 发 Kafka 消息 → 消费者调外部物流 API。
最初用 Kafka 事务(enable.idempotent=true),但发现事务的复杂性和性能损耗让团队很头疼,后来转向 Outbox 模式+业务幂等,现在想听听大家在线上是怎么选的。
【常见分歧】
-
全链路事务:
- 优点:语义正确,保证数据一致性。
- 缺点:实现复杂、性能开销大,尤其在 Kafka 高吞吐场景下。
-
Outbox + 业务幂等:
- 优点:实现相对简单,适合部分场景。
- 缺点:需要业务层做幂等校验,对异常处理要求高。
【我的倾向】
我倾向于 Outbox + 业务幂等,因为 Kafka 本身不支持跨节点的强一致性,而全链路事务在实际业务中很难落地。我们线上也验证过,这种方式在大多数场景下能保证数据最终一致性,同时对系统性能影响较小。
【想听大家的场景】
你在什么场景下会选择全链路事务?什么场景下更倾向 Outbox + 业务幂等?有没有遇到过全链路事务失败导致数据不一致的案例?
0赞
0收藏
0楼层