Kafka 消息可靠性
某团队在重要业务中使用了 Kafka 消息队列,结果出现了消息丢失的问题。
场景:用户支付成功后,系统需要发送"支付成功通知"。但在极端情况下,消息发送后,Kafka Broker 崩溃,消息丢失,导致用户没收到通知。
排查后发现:生产者配置使用了 acks=0,消息发送后不等待确认。
这就是 Kafka 消息可靠性配置不当导致的问题。
【架构权衡】 Kafka 的消息可靠性由多个环节共同保障:生产端确认机制、Broker 副本机制、消费端手动提交。需要根据业务需求在"可靠性"和"性能"之间做出权衡。
一、核心问题 🔴
1.1 可靠性配置
1.2 Exactly-Once 语义
1.3 幂等生产者
二、生产避坑
2.1 消息丢失场景
2.2 消息重复场景
三、可靠性配置清单
四、落地 Checklist
- 可靠性评估:明确业务对消息可靠性的要求
- 生产端配置:acks=all + 幂等生产者
- Broker 配置:replication.factor >= 3
- 消费端配置:手动提交 offset
- 幂等设计:消费端幂等去重
- 监控部署:监控消息 Lag、丢失率