Kafka 顺序消息
某团队在实现订单流程时,需要保证消息的处理顺序:创建订单 → 扣库存 → 扣余额。
但由于 Kafka 消息被分散到了多个分区,消费者使用多线程并发处理,导致顺序错乱。
最终解决方案:
- 同一订单的所有消息路由到同一 Partition
- 消费者使用单线程处理同一 Partition 的消息
【架构权衡】 Kafka 的顺序消息保证是有条件的:单 Partition 内有序,多 Partition 间无序。理解这个约束,才能正确设计消息顺序保证方案。
一、核心问题 🔴
1.1 Kafka 顺序保证
1.2 保证顺序的方案
1.3 消费端顺序处理
二、生产避坑
2.1 消费者并发问题
2.2 消息重试问题
三、落地 Checklist
- 分区规划:根据顺序要求规划分区数
- Key 设计:设计消息 key 保证同一业务 ID 到同一 Partition
- 消费配置:配置合适的并发数
- 顺序验证:测试消息顺序是否正确
- 监控部署:监控分区 Lag、消息顺序