消息队列概述
MQ 是分布式系统的“缓冲区”和“解耦器”。面试主线:解决什么、核心概念、主流选型(本分类以 Kafka 为主线,见系统设计篇的异步化章节)。
MQ 的三大价值
| 价值 | 说明 | 例子 |
|---|---|---|
| 削峰填谷 | 峰值流量入队,下游匀速消费 | 秒杀、抢购 |
| 解耦 | 生产者不关心消费者 | 下单 → 通知/积分/搜索 |
| 异步提速 | 耗时操作后台化 | 发邮件、报表生成 |
核心概念(Kafka 视角)
Topic 分区分发: 并行与扩展的基石
- Topic:消息的逻辑分类(订单、日志)
- Partition:Topic 的物理分片(并行单位、顺序单位)
- Offset:分区内消息的序号(消费位置)
- Consumer Group:一组消费者分摊分区(见消费组篇)
- Broker:Kafka 服务节点(集群)
选型框架
| 场景 | 选择 |
|---|---|
| 高吞吐、日志流、大数据管道 | Kafka |
| 业务消息、灵活路由、中小规模 | RabbitMQ |
| 云原生、多租户、低延迟 | Pulsar |
| 轻量、随应用部署 | Redis Stream |
本分类以 Kafka 为主线(架构/生产者/消费组/高吞吐/可靠性/顺序事务),死信延迟篇覆盖通用机制,对比篇给出全选型。
消息模型
- 队列模型(RabbitMQ):一条消息一个消费者(点对点)
- 发布订阅模型(Kafka):一条消息广播给所有订阅组,组内竞争
- Kafka 的消费组 = 队列 + 发布订阅的结合(组内竞争、组间广播)
面试追问
- MQ 解决什么? 削峰填谷、解耦、异步提速。三价值
- Topic 和 Partition? Topic 逻辑分类,Partition 物理分片(并行 + 顺序单位)
- 队列和发布订阅? 点对点 vs 广播。Kafka 消费组两者兼有
- 什么时候不该用 MQ? 强一致事务场景(MQ 是最终一致)、简单同步调用。引入 MQ 增加复杂度
- 选型看什么? 吞吐、路由需求、运维成本。高吞吐日志用 Kafka,业务消息用 RabbitMQ