困难 · 高频 5/5
如何保证 MQ 消息不丢失?
要从生产者确认、Broker 持久化、消费者确认、幂等消费和补偿对账五个环节一起保证,而不是只依赖 MQ 本身。
简短答案
要从生产者确认、Broker 持久化、消费者确认、幂等消费和补偿对账五个环节一起保证,而不是只依赖 MQ 本身。
详细解析
消息可靠性是一条链路:发送前本地事务或 outbox 记录,发送后等待 broker ack;Broker 开启持久化和副本;消费者处理成功后再 ack;失败要重试、死信或补偿;业务侧必须幂等。
面试回答模板
我会按生产、存储、消费、补偿四段回答。生产者要确认发送成功,Broker 要持久化和副本,消费者成功处理后再确认,失败进入重试或死信,最后通过业务流水做幂等和对账。
易错点
- 只背结论,不解释原理和边界。
- 忽略真实生产环境中的容量、延迟、一致性和失败重试。
- 没有结合项目经验说明为什么这样设计。
常见追问
- 这个方案在高并发下有什么风险?
- 如果数据规模扩大十倍,你会如何调整?
- 线上出现异常时,你会先看哪些指标?