Kafka 架构与分区
某团队在使用 Kafka 时,遇到了消息顺序错乱的问题。
场景:用户下单后,系统发送了三条消息:创建订单 → 扣库存 → 扣余额。消费者收到的顺序变成了:扣库存 → 创建订单 → 扣余额,导致业务逻辑错乱。
排查后发现:消息被分散到了不同的分区,而消费者使用了多线程并发消费,不同分区的消息处理顺序不受 Kafka 保证。
这就是 Kafka 分区机制带来的"顺序性问题"。
【架构权衡】 Kafka 的分区机制是实现高吞吐的关键,但同时也带来了"分区内的有序性 vs 分区间的无序性"问题。理解分区的设计,才能正确使用 Kafka。
一、核心问题 🔴
1.1 Kafka 核心架构
1.2 分区机制
1.3 副本机制与 ISR
二、生产避坑
2.1 顺序性问题
2.2 消息丢失问题
三、落地 Checklist
- 分区规划:评估分区数量(太少并发低,太多元数据多)
- 副本规划:生产环境至少 3 副本
- ISR 配置:min.insync.replicas >= 2
- 顺序性设计:需要有序时使用 key
- 监控部署:监控 Lag、ISR 变化