消息队列:Kafka/RabbitMQ、可靠投递、幂等与削峰
为什么用 MQ,常见中间件对比,消息不丢失/不重复消费的套路,以及削峰填谷。
本节你将能
说清引入 MQ 的收益与代价,以及保证可靠与幂等的工程手段。
核心要点
- 价值:异步解耦、削峰填谷、削峰(流量整形)、数据分发。
- 可靠投递:生产者 confirm/事务;Broker 刷盘+副本;消费者手动 ack,处理完再提交。
- 重复消费:消息自带业务唯一键,消费端做幂等(唯一索引/Redis 去重/状态机)。
- 顺序消息:Kafka 按 key 分区保局部有序;RabbitMQ 单队列单消费者。
- 对比:Kafka 高吞吐、日志/大数据;RabbitMQ 低延迟、路由灵活、企业集成。
面试连招
常被追问:消息积压怎么办?如何保证 Exactly-Once?Kafka 为什么快(顺序写+零拷贝+批量)?
常见坑
把 MQ 当同步调用用;幂等没做导致重复下单;消费者处理慢引发积压雪崩。