跳到主要内容

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 宕机数据丢失副本未同步完就选了新 Leadermin.insync.replicas=2
脏选举非 ISR 副本被选为 Leaderunclean.leader.election.enable=false

消费者端

问题原因解决方案
自动提交后处理失败先提交 offset 再处理业务enable.auto.commit=false + 手动提交
Rebalance 导致重复消费分区重分配业务层做幂等

🔗 延伸阅读