Kafka vs RocketMQ vs RabbitMQ — 什么时候用哪个 · 代码实例 · 业务系统对照 · 优缺点陷阱
消息队列不是"为了用而用",它解决三大问题:解耦、异步、削峰。
| 能力 | 不用 MQ 的痛 | 用 MQ 之后 |
|---|---|---|
| 解耦 | 订单系统直接调短信/积分/库存服务,任何下游挂了订单就失败 | 订单发消息到 MQ,下游各自消费,谁挂了不影响下单 |
| 异步 | 用户下单要等短信+积分+库存全部完成才返回,2 秒+ | 下单同步写库 + 发 MQ,50ms 返回,下游异步处理 |
| 削峰 | 秒杀 10 万请求直接打到 DB,瞬间雪崩 | 请求先进 MQ 排队,消费端按 DB 承受能力匀速消费 |
| 维度 | Kafka | RocketMQ | RabbitMQ |
|---|---|---|---|
| 吞吐量 | 百万级 TPS | 十万级 TPS | 万级 TPS |
| 延迟 | 毫秒级 | 毫秒级 | 微秒级(最快) |
| 消息顺序 | 分区有序 | 分区有序 | 单队列有序 |
| 事务消息 | 弱(0.11+ 有但少用) | 原生支持(强项) | 无 |
| 消息回溯 | 按 offset 任意回放 | 按时间回放 | 不支持(消费即删) |
| 定时/延迟消息 | 无原生支持 | 原生支持(18个级别) | 插件支持 |
| 路由能力 | 弱(Topic 级) | 中(Tag + SQL) | 极强(Exchange 4种) |
| 消息堆积 | 极强(磁盘) | 强(磁盘) | 弱(内存为主,堆积性能陡降) |
| 可用性 | 高(副本) | 高(主从同步) | 高(镜像队列) |
| 客户端语言 | 全(Java/Go/Python...) | 主要 Java | 全(AMQP 标准) |
| 运维复杂度 | 中(Zookeeper/KRaft) | 低(NameServer 轻量) | 低(开箱即用) |
| 消息丢失风险 | 需配置 acks=all | 默认同步刷盘 | 需配置持久化 |
| 典型用户 | LinkedIn/Netflix/Uber/字节 | 阿里/京东/滴滴/小米 | Twitter/Reddit/Steam |
前端埋点上报 → Kafka → Flink 实时计算 + HDFS 离线分析。日均 100 亿条日志,Kafka 单机扛 10 万 TPS 不掉队。
用户下单:要扣库存 + 扣积分 + 发短信。三个服务跨库跨系统,无法用本地事务。用 RocketMQ 事务消息保证"本地事务 + 消息发送"原子性 — 这是 RocketMQ 的杀手锏。
订单创建后要通知:短信服务、邮件服务、数据分析服务、库存服务。每个服务关心不同的事件,用 RabbitMQ 的 Exchange + Routing Key 实现灵活路由 — 这是 RabbitMQ 的强项。
结合全栈资料库里 9 大业务系统,逐一对照"该用哪个 MQ"。
下单涉及多服务(库存/积分/短信),需要事务消息保证一致性;订单超时取消需要延迟消息。RocketMQ 的两大杀手锏正好对口。
支付结果要通知多个下游(订单/对账/通知),路由灵活;单笔消息量不大但延迟敏感。RabbitMQ 微秒级延迟 + 灵活路由最合适。
秒杀瞬间 10 万+ QPS,需要极强吞吐做削峰。Kafka 百万级 TPS 扛得住,且消息可回溯便于事后分析。
消息投递要低延迟(微秒级),消息要按用户路由(路由 key 灵活),单机吞吐够用。延迟敏感型首选 RabbitMQ。
Feed 流、点赞、评论这些行为日志海量,要做实时推荐 + 离线分析。Kafka + Flink 是标配。
日志采集 → 数仓 → 报表,标准大数据管道。Kafka 是 ETL 的中枢。
租户隔离可以用 vhost,路由灵活支持多租户事件分发,中小流量场景下 RabbitMQ 足够。
运单状态流转需要顺序消息(同一运单状态必须有序),延迟消息可以做"48 小时未签收自动跟进"。
风控要实时分析海量行为数据(点击/浏览/下单),Kafka + Flink 实时计算特征,毫秒级决策。
| 场景特征 | 首选 | 理由 |
|---|---|---|
| 日志采集/大数据/流计算 | Kafka | 百万级吞吐 + 消息回溯 + 生态对接 |
| 电商交易/订单/分布式事务 | RocketMQ | 事务消息 + 延迟消息,Java 生态友好 |
| 业务消息/复杂路由/低延迟 | RabbitMQ | 4 种 Exchange + 微秒级延迟 |
| 秒杀/削峰(超高并发) | Kafka | 吞吐碾压,扛得住 |
| 多服务事件分发 | RabbitMQ | Topic Exchange 路由最灵活 |
| 跨服务数据一致性 | RocketMQ | 事务消息独有 |
| 不确定选哪个 | RocketMQ | 最均衡,国内 Java 生态最稳 |
| MQ | 一句话定位 | 杀手锏 | 致命短板 |
|---|---|---|---|
| Kafka | 大数据高速公路 | 百万级吞吐 + 消息回溯 | 无事务消息/延迟消息 |
| RocketMQ | 电商事务专家 | 事务消息 + 延迟消息 | 非 Java 生态弱 |
| RabbitMQ | 路由小能手 | 4 种 Exchange + 微秒延迟 | 吞吐低 + 堆积差 |