Skip to content
极高进阶

一句话答案

三环节保证不丢:生产端确认(acks=all+重试)+ Broker 持久化(同步刷盘/副本)+ 消费端手动 ACK。

核心要点

生产端: 同步发送+重试 / Kafka acks=all Broker: 持久化到磁盘 / 副本同步 消费端: 手动ACK(处理完再确认) / 关闭自动提交offset

端到端: 每一环节都不能丢

追问与易错

追问方向:

  • acks=all 会影响性能吗?怎么权衡?(会,对延迟敏感的场景可以用 acks=1)
  • 消费者宕机未 ACK 怎么办?(消息会重新投递,需要消费端幂等)
  • Broker 磁盘故障怎么保证不丢?(多副本/ISR 机制)

易错点:

  • ❌ "acks=all 就绝对不丢"——如果 ISR 只有 Leader 一个副本,效果等于 acks=1
  • ❌ "消费完就 commit offset"——应该处理完业务逻辑再 commit

💡 记忆锚点

消息不丢 = 接力赛三棒都不能掉:第一棒生产者(确认送达+重试),第二棒Broker(落盘+多副本),第三棒消费者(干完活再签收)。任何一棒掉了接力棒(消息)就丢了,所以面试要三端一起答。