⚖️ 选型对比
Kafka / RocketMQ / RabbitMQ 对比与场景选择
1. 三大主流 MQ 对比?
| 维度 | Kafka | RocketMQ | RabbitMQ |
|---|---|---|---|
| 语言/作者 | Scala(LinkedIn) | Java(阿里) | Erlang(Pivotal) |
| 吞吐 | 最高(百万级/秒) | 高(十万级/秒) | 中等(万级/秒) |
| 延迟 | 毫秒级(批量略高) | 毫秒级 | 微秒级(低延迟之王) |
| 事务消息 | 无「本地事务回查」型事务消息(但有事务性生产者 + read-process-write 的 EOS) | 支持(两阶段+回查) | 弱(tx 模式有限) |
| 延迟消息 | Kafka 3.6+ 已支持;更早版本不支持 | 支持(18 级) | 死信/插件模拟 |
| 消息回溯 | 强(offset 可重置) | 支持(时间戳重置) | 弱 |
| 运维复杂度 | 中等(依赖 ZK/KRaft) | 中高(NameServer+Broker) | 低(开箱即用) |
| 适用 | 日志/大数据/流处理、超高吞吐 | 业务消息(事务/延迟/顺序齐全) | 中小规模、复杂路由(Topic+RoutingKey) |
🎯 面试要点
- 选型口诀:吞吐优先 → Kafka;业务丰富(事务/延迟/顺序)→ RocketMQ;低延迟/路由灵活/轻量 → RabbitMQ
- 国内互联网业务主流:RocketMQ(阿里系)与 Kafka(日志链路)组合使用
2. 具体业务场景怎么选?
- 订单系统 + 下游通知:RocketMQ——事务消息保证"订单创建与消息发送"原子;延迟消息做超时关单
- 日志采集/埋点/用户行为:Kafka——海量吞吐、可回溯重放、与 Flink 生态衔接
- 小型内部系统/复杂路由:RabbitMQ——Exchanger 绑定路由灵活、部署简单
- 秒杀削峰:Kafka/RocketMQ 都行——队列削峰,下游按量消费
- 需要消息消费到死信后人工处理:RocketMQ/RabbitMQ 死信完备
🎯 面试要点
- 选型 = 吞吐量级 + 功能需求(事务/延迟/顺序/回溯)+ 运维成本 + 团队技术栈——按这个框架答
- 不迷信:需求简单时用 Redis List/Stream 也能当轻量队列(小流量)