三大主流消息中间件全面对比 · 架构 · 性能 · 优劣势 · 适用场景
Exchange 路由、消息确认 (ACK)、死信队列 (DLX)、优先级队列
内存 + 磁盘,消息持久化到 Mnesia 数据库
顺序消息、事务消息、延迟消息、消息回溯、ACL 权限
CommitLog 顺序写,ConsumeQueue 索引,零拷贝发送
分区副本、ISR 机制、Exactly-Once、流处理 (KStreams)
分区日志文件、顺序 I/O、页缓存、零拷贝 (sendfile)
| 对比维度 | 🟠 RabbitMQ | 🔴 RocketMQ | 🟣 Kafka |
|---|---|---|---|
| 开发语言 | Erlang | Java | Scala / Java |
| 协议支持 | AMQP、STOMP、MQTT、WebSocket | 自定义 (Remoting) | 自定义 (Binary TCP) |
| 吞吐量 | 万级 ~ 10万级 /秒 | 十万级 ~ 百万级 /秒 | 百万级 ~ 千万级 /秒 |
| 延迟 | 微秒级 (最低) | 毫秒级 | 毫秒级 (批量优化后) |
| 消息顺序 | 队列级别保证 | 严格顺序 (分区) | 分区内严格有序 |
| 消息重试 | 客户端 ACK + 死信队列 | 服务端 ConsumeQueue 重试 | 偏移量 (Offset) 手动控制 |
| 事务消息 | 支持 (性能影响大) | 原生支持 (半消息机制) | 有限支持 (需手动实现) |
| 延迟消息 | 通过 TTL + DLX 实现 | 原生支持 (18个等级) | 不支持 (需外部方案) |
| 消息回溯 | 不支持 | 支持 (按时间/偏移量) | 支持 (Offset 重置) |
| 集群方式 | 镜像队列 / 仲裁队列 | 主从 (DLedger 选举) | 分区多副本 (Leader/Follower) |
| 监控管理 | Web UI 内置 | 需单独部署 Console | 需单独部署 Manager / CMAK |
| 社区生态 | 成熟、多语言 SDK | 国内强、Apache 顶级 | 最丰富 (Kafka Connect/Streams) |
| 典型使用 | 易用性优先、低延迟 | 业务消息、顺序/事务 | 日志、流处理、大数据 |
需要极低延迟(微秒级)、复杂路由逻辑、多协议接入(MQTT/IoT 场景)、或者团队规模小希望开箱即用。
需要顺序消息、事务消息、延迟消息、消息回溯等高级特性;业务消息场景(订单、支付);希望 Java 技术栈方便定制。
日志收集、流处理、大数据管道、高吞吐量场景;需要构建实时数据平台;团队有能力运维较复杂的分布式系统。