Kafka vs RabbitMQ vs RocketMQ vs Pulsar:四大开源消息中间件全面对比
· 阅读需 6 分钟
消息中间件应用广泛,Kafka、RabbitMQ 、RocketMQ 和 Pulsar 更是其中的佼佼者,经常被放在一起比较。
从数据迁移同步行业来看,Kafka 用户占了大多数,因为在大数据生态中,其是核心组件之一。RocketMQ 在国内也比较流行,主要应用在在线业务场景,这和它的技术特性和发展路径紧密相关。相比之下,RabbitMQ 和 Pulsar 的使用量在国内相对少些。
那么,它们到底有什么区别呢?本文将从架构设计、性能表现、可扩展性、可靠性 4 个角度进行对比,以呈现一个相对客观的产品状态。
架构设计
Kafka
Kafka 采用分布式日志存储架构。Producer 将消息写入 Broker,Broker 将消息存储在分区日志中,Consumer 从分区中顺序拉取数据。ZooKeeper 管理集群元数据。

RabbitMQ
RabbitMQ 基于 AMQP 协议。Producer 将消息发送到 Exchange,再由 Exchange 根据路由规则将消息投递到不同 Queue,最终由 Consumer 消费。其路由模式(direct/topic/fanout/headers)非常灵活,便于应对复杂消息流转。

RocketMQ
RocketMQ 采用轻量级 NameServer + Broker 架构,Producer 从 NameServer 获取路由信息,再将消息写入 Broker 的队列(MessageQueue)。支持事务消息、顺序消息。

Pulsar
Pulsar 采用 Broker + BookKeeper(存储层)架构,实现计算与存储分离。支持分层存储,天然云原生。

性能表现
| 指标 | Kafka | RabbitMQ | RocketMQ | Pulsar |
|---|---|---|---|---|
| 吞吐量 | 单节点可达 数十万–百万 TPS,集群扩展后可达 百万级 TPS+ | 单节点约 万级 TPS,高并发下易受限 | 单节点 数十万 TPS,集群可扩展到百万级(双十一场景) | 单节点 数十万 TPS,大规模集群可达 百万级+ |
| 消息延迟 | 通常 数十毫秒 | 毫秒级,在高吞吐量情况下延迟增大 | 通常几十毫秒 | 通常 几十毫秒 |
| 消息堆积能力 | 天然支持海量堆积与历史回放(磁盘持久化,分区日志) | 不适合长时间、大规模堆积,内存压力大 | 支持长时间堆积 | 基于 BookKeeper,多副本存储,支持大规模堆积与分层存储 |
注:数据仅供参考,权威 benchmark 参见产品官方资料
