跳转到正文

横向矩阵总览 ​

本页结论:横向矩阵只回答「在什么条件下各产品如何实现某项能力」,不回答「谁更好」。每个单元格 = 五级标记 + 一句结论 + 详情链接;所有结论核对日期 checkedAt: 2026-08-19。

本章节对八个产品做同维度横向比较:四个 P0——RabbitMQ、Kafka、RocketMQ、Pulsar,两个 P1——Redis Streams、NATS(Core + JetStream),两个 P2——ActiveMQ Artemis(分卷与实验编排已就绪,快照未采集,矩阵单元格以官方文档为依据)与 ActiveMQ Classic(3 个实验快照已采集,矩阵单元格以实验快照与官方文档为依据)。阅读前建议先看对应产品分卷的总览与核心概念映射,矩阵不重复讲解概念本身。

矩阵阅读方法 ​

  1. 先看标记,再看结论:五级标记表示能力的「实现层级」(原生还是需要拼装),不表示优劣。
  2. 结论必须连着前置条件读:任何「支持」都附带最小前置条件(配置、部署形态、订阅类型等),脱离条件的打勾没有意义。
  3. 不给脱离场景的排名:同一能力在不同场景下最优解不同。需要选型结论时,走选型指南的「输入 → 输出」流程。
  4. 留意脚注:同名异义术语(事务、重试、分区、延迟消息等)一律加脚注说明各产品含义差异,不强行归一;完整对照见统一术语表。
  5. 时效性:产品行为随版本演进,所有时效性结论带核对日期(当前基线 checkedAt: 2026-08-19)。

版本基线(checkedAt: 2026-08-19) ​

产品版本分卷入口
RabbitMQ4.1.4/products/rabbitmq/
Kafka4.3.1/products/kafka/
RocketMQ5.5.0/products/rocketmq/
Pulsar4.2.4/products/pulsar/
Redis Streams8.2.1/products/redis-streams/
NATS2.11.5/products/nats/
ActiveMQ Artemis2.44.0/products/artemis/
ActiveMQ Classic6.2.0/products/activemq-classic/

镜像均以 tag+digest 双锁定,见 .env.versions 与版本政策。

五级标记图例 ​

标记层级含义判定规则
✅原生Broker/产品内置能力,按官方文档开启配置即可使用能力代码在产品自身,不依赖第三方组件或自写逻辑
🔧组合配置需要组合多个原生特性或专门配置才能达到效果全部由产品特性构成,但正确性取决于配置组合
🧩客户端框架由官方/社区客户端 SDK 或框架实现,非 Broker 能力换个客户端,行为可能不复存在
🛠业务实现需要在业务代码或外部系统中自建产品不提供该机制,只提供搭建它的原料
➖不适用该产品不提供此能力,或该概念在其模型中不成立不打分、不强行类比;说明为什么不存在

判定顺序:先看能力由谁实现(Broker → 客户端 → 业务代码),再看是否需要额外组件或配置组合。禁止只打勾或打叉:每个 ✅ 后面都必须跟着前置条件。

编写原则(对应 spec §8.1) ​

原则本章节的落实方式
每个单元格最多先给一句结论,再链接详细说明单元格格式统一为「标记 + 一句结论 + /products/<product>/<page> 链接」
五级标记:原生支持 / 需要组合配置 / 客户端或框架实现 / 业务实现 / 不适用见上图例与判定规则,全部单元格强制使用其一
每项能力附最小前置条件,禁止只打勾或打叉结论句中包含条件(如「需启用 DeadLetterPolicy」「acks=all + min.insync.replicas」)
对不同语义的同名功能增加脚注,不强行归一各页脚注区说明差异,本页下方给出高频术语速览
时效性结论记录产品文档版本与核对日期页首标注版本基线与 checkedAt: 2026-08-19

交互能力速览 ​

下表为五大能力在八个产品中的实现层级速览(可点击单元格中的「证据」跳转详细页);逐项结论与前置条件见各专题矩阵页。

能力RabbitMQ 4.1.4Kafka 4.3.1RocketMQ 5.5.0Pulsar 4.2.4Redis Streams 8.2.1NATS 2.11.5Artemis 2.44.0Classic 6.2.0
端到端 exactly-once业务实现
幂等表 + 手动 ACK 组合 证据
客户端框架
仅集群内 EOS(事务+幂等生产者);跨系统仍需业务幂等 证据
业务实现
事务消息只保证「最终投递」,业务端仍需幂等 证据
业务实现
同上:依赖业务幂等表 证据
业务实现
幂等表 + 手动 XACK 组合 证据
业务实现
JetStream 显式 Ack + 业务幂等表;Msg-Id 去重仅在重发窗口内 证据
业务实现
XA 事务只保证 Broker 内原子;跨系统仍需业务幂等 证据
业务实现
SESSION_TRANSACTED 事务消费只保证 Broker 内原子;跨系统仍需业务幂等 证据
顺序消息组合配置
单队列 + 单消费者(prefetch=1) 证据
原生
分区内有序;同 key 进同分区 证据
原生
FIFO Topic + MessageGroup 证据
组合配置
分区 + Key_Shared/Exclusive 订阅 证据
组合配置
单 Stream 天然 FIFO(无分区);组内并行消费会破坏处理顺序 证据
组合配置
单 Stream 有序(无分区);顺序消费需单消费者 证据
组合配置
单队列 FIFO;同组有序需 _AMQ_GROUP_ID(同组串行单消费者) 证据
组合配置
单队列 FIFO;同组有序需 JMSXGroupID(Message Groups) 证据
内置重试与 DLQ组合配置
TTL + DLX 拼装,无原生重试计数 证据
业务实现
Broker 不重试,业务代码自建 证据
原生
Broker 内置重试策略 + %DLQ% 证据
组合配置
客户端 DeadLetterPolicy(需 Shared/Key_Shared) 证据
组合配置
PEL + XCLAIM/XAUTOCLAIM 重领;DLQ 需业务转写另一 Stream 证据
组合配置
AckWait + MaxDeliver 原生重投;耗尽后丢弃,DLQ 需自建 证据
原生
address-setting 重试(max-delivery-attempts+退避)+ dead-letter-address 证据
原生
redeliveryPolicy(URL 声明、Broker 执行)+ 默认共享 ActiveMQ.DLQ(零配置) 证据
延迟消息组合配置
TTL + DLX 近似 证据
业务实现
无内建,业务侧时间轮/状态表 证据
原生
任意精度定时投递(4.x+ 时间轮) 证据
业务实现
无内建(DelayedDelivery 仅分区级粗粒度) 证据
业务实现
无内建:常用 ZSET 到期表 + 轮询转出 证据
业务实现
无内建:需外部调度器到点发布 证据
原生
_AMQ_SCHED_DELAY 属性指定延迟毫秒数 证据
业务实现
无原生延迟投递(与 Artemis 不同),需业务侧到点重发 证据
消息回放不适用
ACK 即删,无日志可回放 证据
原生
按 offset/时间戳重置消费组位点 证据
原生
重置消费位点(mqadmin resetOffset) 证据
原生
reset-cursor 到 earliest/时间戳 证据
原生
XACK 不删除;新建消费组从 0-0 或按 Entry ID 重读(受 XTRIM 限制) 证据
原生
JetStream 按 sequence/时间戳创建新消费者回放 证据
不适用
ack 即删,队列无日志可回放 证据
不适用
确认即删(KahaDB 只存未消费消息),无回放语义 证据
  • 「事务」同名异义:Kafka 事务是跨分区原子写+读隔离;RocketMQ 事务消息是 Half Message+回查的最终投递保证;两者不可互相替代,见统一术语表。
  • 五级标记只回答实现层级,不回答优劣;每个单元格的前置条件以专题页为准。

术语映射矩阵(spec §8.2 矩阵之一) ​

同一概念在不同产品中的名字与边界不同,比较前先对齐术语:

中性术语RabbitMQKafkaRocketMQPulsarRedis StreamsNATSArtemisActiveMQ Classic
存储消息的实体Queue(concepts)Topic 的 Partition(concepts)CommitLog + MessageQueue 索引(concepts)Partition + BookKeeper ledger(concepts)Stream:单 key 追加日志(concepts)JetStream Stream:File/Memory 存储(concepts)Address 下的 Queue:journal 存储(concepts)Queue/Topic 目的地:KahaDB 存储(concepts)
逻辑分类Exchange + Binding 决定去向,Queue 实际存储TopicTopicTopicStream keySubject(层级通配 */>)Address(anycast/multicast 路由类型)Queue/Topic 目的地(无 Exchange,按目的地名直连)
顺序/并行的最小单元单个 QueuePartitionMessageGroup(FIFO)/ MessageQueuePartition + 订阅类型单个 Stream(无分区)单个 Stream(无分区)单个 Queue(或 Message Group 内)单个 Queue(或 Message Group JMSXGroupID 内)
竞争消费单位同一 Queue 上的多个 consumerConsumer Group(组内瓜分分区)Consumer Group(集群消费模式)Subscription(Shared/Failover/Key_Shared)Consumer Group(组内 XREADGROUP 竞争分发)Core Queue Group / JetStream Consumer同一 Queue 上的多个 consumer(round-robin)同一 Queue 上的多个 consumer(竞争分发)
独立订阅(广播)多条 Binding 到多个 Queue多个 Consumer Group 各自位点广播消费模式 / 多个 Consumer Group多个 Subscription 各自游标多个 Consumer Group 各自 last-delivered-id多个订阅者;JetStream 多个 Consumer 各自位点multicast Address 每订阅一个 QueueTopic 上每个 durable subscription 各留一份
消费位点不暴露位点(ACK 即删,无可回退游标)OffsetConsumer Offset(可按时间重置)Cursor(reset-cursor)last-delivered-id + PEL(XGROUP SETID 可改)Consumer sequence(DeliverPolicy 可定起点)不暴露位点(ack 即删,无可回退游标)不暴露位点(确认即删,无可回退游标)
隔离边界Virtual Host无原生租户层级(ACL/Quota 组合)无原生租户层级(ACL)Tenant / Namespace无原生租户层级(ACL/DB 编号弱隔离)Account(原生多账号隔离)无原生租户层级(角色/地址 ACL)无原生租户层级(JAAS + 目的地 ACL)

术语的中性定义与「不可直接等价之处」详见统一术语表。

同名异义术语速览(必读脚注) ​

术语差异要点
事务Kafka = 日志内多分区原子写 + EOS;RocketMQ = Half Message + 本地事务 + 回查,保证「发送与本地事务原子」;Pulsar = 跨 Topic/Partition 原子操作;RabbitMQ = channel 级批量发布提交。四者都不等于跨数据库分布式事务。详见投递语义。
重试RocketMQ 指 Broker 内置重投;RabbitMQ/Kafka 无内置消费重试,「重试」指 TTL+DLX 或应用层 retry topic 模式;Pulsar 指 negativeAck/ack 超时触发的重投。详见重试与 DLQ。
分区Kafka/Pulsar 的 Partition 是并行、顺序与复制的基本单位;RocketMQ 的 MessageQueue 是消费视角的逻辑队列(所有消息先写共享 CommitLog);RabbitMQ 队列没有分区概念。详见顺序。
延迟消息RocketMQ 指原生指定投递时间戳的消息类型;RabbitMQ 只有 TTL+DLX「过期后转发」的近似模式;Kafka/Pulsar 无内置,需业务自建。详见延迟/定时消息。
回放指保留期内按位点重读历史(日志语义),不等于消费失败后的「重投递」(redelivery)。详见回放与保留。

十一张矩阵与页面映射(spec §8.2) ​

spec 矩阵所在页面
1. 术语映射矩阵本页
2. 消息模型矩阵投递语义
3. 路由矩阵投递语义
4. 确认与投递矩阵投递语义
7. 事务矩阵投递语义
5. 顺序与回放矩阵(顺序部分)顺序
5. 顺序与回放矩阵(回放部分)+ 8. 存储与保留矩阵回放与保留
6. 重试/延迟/DLQ 矩阵(重试与 DLQ)重试与 DLQ
6. 重试/延迟/DLQ 矩阵(延迟)延迟/定时消息
9. 高可用与扩展矩阵存储与高可用、扩展与并行
10. 运维矩阵(安全能力部分)安全
10. 运维矩阵(工具/指标/Schema 部分)运维观测
11. 选型矩阵选型指南

本章页面 ​

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