Skip to content

存储与高可用、扩展与并行矩阵

本页结论:四个产品的高可用模型差异极大——RabbitMQ 以队列为单位做 Raft 多数派复制(Quorum Queue),Kafka 以分区为单位做 ISR 副本,RocketMQ 以 Broker 为单位做主从/DLedger 复制,Pulsar 把存储下沉到 BookKeeper、Broker 本身无状态;扩展粒度与多租户能力同样由各自架构决定。

覆盖 spec §8.2「高可用与扩展矩阵」,并合并「存储与高可用」「扩展与并行」两个主题。版本基线与标记规则见矩阵总览(checkedAt: 2026-08-19)。

复制与高可用

能力RabbitMQKafkaRocketMQPulsar
复制单元与协议✅ Quorum Queue:队列级 Raft 多数派复制(storage-ha✅ 分区级副本 + ISR(in-sync replicas)机制,KRaft 复制元数据(storage-ha🔧 Broker 主从复制:同步双写/异步复制;DLedger/Controller 模式可自动选主,需额外部署形态(storage-ha✅ 存算分离:消息写入 BookKeeper ledger 多副本,Broker 无状态、随时可替换(storage-ha
写入确认条件🔧 Quorum Queue 写入需多数派落盘才确认,延迟高于单节点(storage-ha✅ acks=all 要求 ISR 全部副本确认;配合 min.insync.replicas 控制可写性(reliability🔧 同步双写等主从都成功;异步复制主机确认即返回(reliability✅ 写确认需 ensemble 中满足 write/ack quorum 的 bookie 落盘(可配)(storage-ha
故障容忍✅ Quorum Queue 可容忍少数派节点丢失;失去多数派时该队列不可写(保数据安全)(storage-ha✅ ISR 收缩后仍可读写;ISR 少于 min.insync.replicas 时拒写(storage-ha🔧 异步复制主机宕机有丢消息窗口;同步双写从机故障影响可用性(pitfalls✅ bookie 故障后自动触发副本修复(rereplication);Broker 故障由无状态架构直接接管(storage-ha
元数据服务✅ 节点间内置(4.x 无外部依赖)✅ KRaft 内置控制器集群,无需 ZooKeeper(storage-ha✅ NameServer 集群无状态注册发现;5.x 架构为 proxy + namesrv + broker(concepts🔧 依赖 ZooKeeper/Oxia 存元数据,是部署的一部分(storage-ha

扩展与并行

能力RabbitMQKafkaRocketMQPulsar
扩容粒度🔧 增加队列数 + 增加节点分担队列;单队列无分区,吞吐受单队列上限约束(storage-ha✅ 分区是并行单位:Topic 分区数决定消费并行度;分区只能增、难缩(storage-ha✅ MessageQueue 数可调:队列数决定消费并行度,可在线调整(storage-ha✅ 分区 Topic + Broker 水平扩展;存算分离使存储容量(bookie)与服务层独立扩缩(storage-ha
消费并行上限队列数(每队列内竞争消费,prefetch 控流)Consumer Group 内有效消费者数 ≤ 分区数,多余消费者空闲(routing队列数 × 消费线程配置(集群消费模式组内分担队列)(routing由订阅类型决定:Shared 最灵活、Key_Shared ≤ 不同 key 数、Exclusive/Failover 单活(routing
热点拆分能力🔧 靠拆分队列手动分摊🔧 热点 key 集中在单分区,需业务改造 key 设计(pitfalls🔧 MessageGroup 倾斜时同样集中到单队列(pitfalls🔧 Key_Shared 的 key 倾斜导致消费者负载不均(pitfalls
多租户✅ Virtual Host:vhost 级资源与权限隔离(轻量,无原生配额体系)(concepts➖ 无原生租户层级:topic 命名约定 + ACL + Quota 组合近似(operations➖ 无原生租户层级:ACL + 部署层隔离(operations✅ 原生 Tenant/Namespace 层级:配额、保留策略、权限按命名空间管理(concepts

路由与分发机制(扩展视角)

产品机制对扩展的影响
RabbitMQ✅ Exchange + Binding(routing路由灵活但消息落点由绑定决定,扩容靠增加队列
Kafka✅ partition key 哈希(routingkey 分布直接决定负载是否均匀
RocketMQ✅ Topic + MessageQueue 选择 / MessageGroup(routing队列数与发送策略共同决定负载分布
Pulsar✅ 分区 key + 订阅类型(routing分区数决定服务层并行,BookKeeper 决定存储扩展

完整路由语义见投递语义矩阵的路由部分。

脚注:同名异义

  • 「扩容」:Kafka/RocketMQ/Pulsar 的扩容主要是「增加分区/队列并重均衡」;RabbitMQ 的扩容是「增加队列并把队列分布到更多节点」——前者扩的是数据分片,后者扩的是独立队列的数量。
  • 「副本」:Kafka replica 是分区副本(有 Leader/Follower 与 ISR);RabbitMQ Quorum 副本是 Raft 成员(多数派概念,无 ISR);RocketMQ 主从是 Broker 级角色;Pulsar 的副本在 BookKeeper ledger 层(bookie 不区分 leader)。四者的故障切换方式与数据一致性窗口都不同。
  • 「Broker 无状态」:仅对 Pulsar 成立——其消息状态在 BookKeeper,Broker 宕机不丢数据;Kafka/RocketMQ 的 Broker 本身持有数据(或主从持有),RabbitMQ 节点持有队列数据。

相关页面

以统一实验验证消息系统语义边界