Skip to content

统一术语表

本页结论:以产品无关的中性术语定义核心概念;每个术语给出中性定义、各产品对应名与不可直接等价之处。覆盖 RabbitMQ / Kafka / RocketMQ / Pulsar 四个核心产品的公共概念与各自特有实体。

Message / Record / Event / Command

  • 中性定义:在消息系统中传输的最小数据单元,含头部元数据与载荷。
  • 各产品对应名:RabbitMQ message;Kafka record;Pulsar message;RocketMQ message;Redis Streams entry;NATS message。
  • 不可直接等价之处:Kafka record 只存在于分区日志中,没有逐条删除语义;RabbitMQ message 被消费确认后即从队列移除,二者生命周期模型不同。

Queue / Topic / Stream / Partition

  • 中性定义:消息的暂存与分发单元。Queue 通常指竞争消费的缓冲单元;Topic 是按名称订阅的逻辑通道;Partition 是日志内可并行消费的最小顺序单元。
  • 各产品对应名:RabbitMQ queue/exchange;Kafka topic+partition;RocketMQ topic+MessageQueue;Pulsar topic+partition;Redis Stream;NATS subject/stream。
  • 不可直接等价之处:RabbitMQ topic 是 exchange 类型而非订阅通道;Kafka topic 自带持久日志语义;“topic”一词在两产品中不是同一对象。

Exchange / Binding / Routing Key

  • 中性定义:Exchange 是 RabbitMQ 中接收生产者消息并按规则分发到队列的实体;Binding 是 exchange 与队列间的路由关系;Routing Key 是消息携带的路由依据。
  • 各产品对应名:Kafka 无对应物(由 partitioner 决定分区);Pulsar 无对应物;RocketMQ 以 Tag 做粗过滤。
  • 不可直接等价之处:RabbitMQ 的路由发生在 Broker 侧声明式绑定;Kafka 的“路由”是客户端分区计算,语义不可互换。

Consumer / Subscription / Consumer Group

  • 中性定义:Consumer 读取并处理消息的实体;Subscription 表示一份独立的消费位置与兴趣;Consumer Group 内多个消费者分摊同一订阅的消息。
  • 各产品对应名:RabbitMQ consumer(竞争消费由同队列多消费者实现);Kafka consumer group;Pulsar subscription(四类);RocketMQ consumer group;Redis consumer group;NATS queue group。
  • 不可直接等价之处:Kafka consumer group 与分区绑定再均衡;RabbitMQ 无再均衡概念,消息按推送/拉取分发;Redis consumer group 的扩展受单 Stream 限制。

ACK / NACK / Offset / Redelivered

  • 中性定义:ACK 是消费侧对“已处理”的确认;NACK 表示拒绝;Offset 是日志型系统的消费位置游标;Redelivered 标记该消息是重投递。
  • 各产品对应名:RabbitMQ ack/nack/reject + redelivered 标志;Kafka offset commit;Pulsar ack(individual/cumulative);RocketMQ ack;Redis XACK + PEL;NATS JetStream ack。
  • 不可直接等价之处:RabbitMQ ACK 后消息删除;Kafka 提交 offset 不删除记录,且提交点之前/之后的崩溃窗口产生不同丢失/重复结果。

Publisher Confirm / Idempotence

  • 中性定义:Publisher Confirm 是 Broker 对“已接收并承担保管责任”的生产侧确认;Idempotence 指重复提交不产生额外副作用。
  • 各产品对应名:RabbitMQ publisher confirms;Kafka idempotent producer(enable.idempotence);Pulsar producer 去重(需开启);RocketMQ 无等价内建生产幂等。
  • 不可直接等价之处:Publisher Confirm 与 Consumer ACK 是互相独立的两段确认;Kafka 幂等生产只保证单会话内分区级不重复,不等于端到端业务幂等。

Retry / Dead Letter Queue (DLQ)

  • 中性定义:Retry 是失败消息的延迟再投递;DLQ 是多次失败后被隔离的消息去处。
  • 各产品对应名:RabbitMQ 依赖 DLX + TTL 组合实现;RocketMQ 内建消费重试与 %DLQ% 队列;Pulsar Retry Letter Topic + DLQ(客户端配置);Kafka 无内建,retry topic/DLQ 属应用或框架模式。
  • 不可直接等价之处:四者实现层级不同(Broker 内建 / 客户端 / 应用模式),不能写成相同的原生机制。

Retention / Replay

  • 中性定义:Retention 是消息保留策略(时间/大小);Replay 是从历史位置重新消费。
  • 各产品对应名:Kafka retention + consumer seek;Pulsar retention + cursor reset;RabbitMQ Classic Queue 消费即删,回放能力有限(Stream 除外)。
  • 不可直接等价之处:“消费”在日志型产品不删除数据,在队列型产品通常删除,回放能力因此根本不同。

Consumer Lag / Backlog

  • 中性定义:消费位置落后于最新位置的差值;泛指未处理消息的堆积。
  • 各产品对应名:Kafka consumer lag;RabbitMQ queue depth / messages ready;Pulsar backlog;Redis PEL + stream length。
  • 不可直接等价之处:队列深度包含未确认与等待中消息,lag 是游标差值,告警阈值不可互相套用。

Leader / Replica / Quorum

  • 中性定义:Leader 是分区/队列当前提供读写的副本;Replica 是复制副本;Quorum 是多数派确认条件。
  • 各产品对应名:Kafka leader/ISR;RabbitMQ Quorum Queue(Raft 多数派);Pulsar broker + BookKeeper ledger quorum;RocketMQ broker 主从/DLedger。
  • 不可直接等价之处:各产品“确认写成功”所需的副本条件与故障切换语义不同,须按产品单独说明。

顺序单元(Key / MessageGroup)

  • 中性定义:顺序保证只在某个最小单元内成立:同一单元的消息进同一顺序通道,单元之间可并行。
  • 各产品对应名:RabbitMQ 单队列(无 key 概念);Kafka record key → partition;RocketMQ MessageGroup;Pulsar message key + 分区 + 订阅类型。
  • 不可直接等价之处:Kafka 的 key 只决定分区,顺序还受重试与幂等配置影响;RocketMQ 的 MessageGroup 是显式顺序声明;Pulsar 的顺序还依赖订阅类型(Shared 下无跨消费者顺序)。

Tag / 消息属性过滤

  • 中性定义:在不拆分队列/topic 的前提下,按消息附带的标签在消费侧或 Broker 侧做粗过滤。
  • 各产品对应名:RocketMQ Tag(Broker 侧过滤);Kafka 无内建(靠多 topic 或消费端判断);RabbitMQ 用 routing key + 绑定表达;Pulsar 无内建 Tag(可自定属性由消费端过滤)。
  • 不可直接等价之处:RocketMQ Tag 是 Broker 侧过滤语义,与 RabbitMQ 的声明式绑定机制不可互换。

事务消息 / Half Message

  • 中性定义:把「本地事务结果」与「消息是否投递」绑定的机制:消息先以不可见状态暂存,本地事务结果决定其提交或丢弃,结果未知时由 Broker 回查。
  • 各产品对应名:RocketMQ Half Message + 事务回查;Kafka producer transaction(仅解决集群内读写原子性);RabbitMQ 无对应(用 Outbox 模式替代);Pulsar transaction(面向读写一致性,非本地事务回查)。
  • 不可直接等价之处:RocketMQ 事务消息解决「发送方本地事务 + 发消息」的原子性;Kafka 事务解决「跨分区写 + 消费位点」的原子性——同名「事务」,边界完全不同。

订阅类型(Pulsar)

  • 中性定义:同一订阅名下消息与消费者的关系模式:独占、分摊、主备、按键粘连。
  • 各产品对应名:Pulsar Exclusive / Shared / Failover / Key_Shared;Kafka 近似 consumer group(分摊,分区粒度);RabbitMQ 近似竞争消费(分摊)。
  • 不可直接等价之处:Pulsar 四类订阅是同一 topic 上可并存的多份进度;Kafka 的「分摊」固定按分区再均衡;Shared 订阅不保证同 key 顺序(需 Key_Shared)。

Cursor / 消费位点

  • 中性定义:订阅/消费组的消费进度标记,决定从哪条消息继续。
  • 各产品对应名:Pulsar cursor(mark delete position);Kafka committed offset;RocketMQ 消费位点(ConsumeQueue offset);RabbitMQ 无显式位点(ACK 即删)。
  • 不可直接等价之处:日志型产品的位点可重置回放;RabbitMQ 确认后消息即删,没有可回退的位点概念。

NameServer / Proxy(RocketMQ)

  • 中性定义:NameServer 是无状态路由注册与发现服务;Proxy 是 5.x 引入的无状态接入层,为 gRPC 客户端提供接入与协议适配。
  • 各产品对应名:Kafka 用 controller + broker 元数据(KRaft);RabbitMQ 客户端直连 broker;Pulsar 客户端经 broker 的 lookup 服务发现。
  • 不可直接等价之处:RocketMQ 5.x 的 gRPC 客户端必须经 Proxy 接入,与 Kafka/RabbitMQ 的直连模型不同。

BookKeeper / Ledger(Pulsar)

  • 中性定义:BookKeeper 是 Pulsar 的持久化存储层;Ledger 是其中追加写的日志段,按 quorum 复制。
  • 各产品对应名:Kafka 分区日志文件(broker 本地盘 + ISR 复制);RocketMQ CommitLog(broker 本地盘 + 主从/DLedger);RabbitMQ 队列存储(本地盘 + Quorum 复制)。
  • 不可直接等价之处:Pulsar 存算分离——broker 无状态、数据在 BookKeeper;其余三者数据与计算节点绑定,扩容与故障恢复路径不同。

Negative Ack / 主动重投

  • 中性定义:消费者主动告知 Broker「本条处理失败,请尽快重投」,区别于等待 ack 超时。
  • 各产品对应名:Pulsar negativeAcknowledge(配合 DeadLetterPolicy 达上限进 DLQ);RabbitMQ basicNack/basicReject + requeue;Kafka 无对应(失败处理在应用层);RocketMQ 消费返回 FAILURE 由 Broker 调度重试。
  • 不可直接等价之处:触发重投的机制与重试次数控制位置各不相同(客户端策略 / Broker 策略 / 应用层),不可互相套用参数。

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