Kafka 消息丢失全链路排查
📺 配套视频
📝 知识点总结
消息丢失的三个环节
生产者 ──发送──→ Broker ──存储──→ 消费者 ──消费──→ 业务处理
↑ 可能丢失 ↑ 可能丢失 ↑ 可能丢失
生产者端
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 发送失败未感知 | 使用 fire-and-forget 模式 | 使用带回调的 send() + 重试 |
| 网络抖动丢消息 | 未配置重试 | retries=3 + retry.backoff.ms=100 |
| 消息乱序 | 重试导致顺序错乱 | enable.idempotence=true(幂等 + 顺序保证) |
生产者推荐配置:
acks=all
retries=3
enable.idempotence=true
max.in.flight.requests.per.connection=5
Broker 端
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Leader 宕机数据丢失 | 副本未同步完就选了新 Leader | min.insync.replicas=2 |
| 脏选举 | 非 ISR 副本被选为 Leader | unclean.leader.election.enable=false |
消费者端
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 自动提交后处理失败 | 先提交 offset 再处理业务 | enable.auto.commit=false + 手动提交 |
| Rebalance 导致重复消费 | 分区重分配 | 业务层做幂等 |
🔗 延伸阅读
- 技术专题介绍 — 查看更多技术视频配套资料