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. 具体业务场景怎么选?

🎯 面试要点

  • 选型 = 吞吐量级 + 功能需求(事务/延迟/顺序/回溯)+ 运维成本 + 团队技术栈——按这个框架答
  • 不迷信:需求简单时用 Redis List/Stream 也能当轻量队列(小流量)

🎤 常见面试追问

  1. Kafka、RocketMQ、RabbitMQ 怎么选?(必背)——吞吐优先/大数据链路 → Kafka;业务消息(事务/延迟/顺序)→ RocketMQ;低延迟/路由灵活/中小规模 → RabbitMQ。
  2. 为什么订单系统爱用 RocketMQ?——事务消息保证"订单创建与消息发送"原子;延迟消息做超时关单;顺序消息做状态流转。Kafka 这些都要自己实现。
  3. 为什么日志链路用 Kafka?——吞吐量级差距(Kafka 百万级/秒 vs 其他十万级)+ 与 Flink/ES 生态衔接 + 消息回溯(offset 重置重放)。
  4. 能用 Redis 当消息队列吗?——小流量可以(List 的 LPUSH/BRPOP、Stream 支持消费者组),但没有 MQ 的可靠性(持久化弱、无死信、无事务回查)——别在生产核心链路用。
  5. 选型还看什么?——团队技术栈(Java 团队首选 RocketMQ)、运维成本(RabbitMQ 部署简单)、云厂商托管(云 MQ 省运维)。

📖 名词解释(本页术语)

术语 大白话解释
KafkaScala 写的分布式消息系统:吞吐之王,日志/埋点/流处理标配。
RocketMQ阿里 Java 系消息中间件:业务功能最全(事务/延迟/顺序),国内主流。
RabbitMQErlang 写的轻量 MQ:低延迟、路由灵活(Exchanger)、部署简单,中小规模常用。
吞吐量每秒能处理的消息数:Kafka 百万级、RocketMQ 十万级、RabbitMQ 万级。
消息回溯把消费位点重置到过去重新消费(Kafka 支持,排查问题利器)。
托管 MQ(云 MQ)云厂商提供的 MQ 服务(阿里云 RocketMQ/Kafka 等):省运维、高可用保障,小团队首选。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。