Skip to content

回放与保留矩阵

本页结论:RabbitMQ 是队列语义——ACK 即删、不可回放;Kafka、RocketMQ、Pulsar 都是日志语义——消费不删除消息,可按位点/时间戳回放,保留由时间/大小策略与 Compaction、分层存储决定。

覆盖 spec §8.2「顺序与回放矩阵」的回放部分与「存储与保留矩阵」。版本基线与标记规则见矩阵总览(checkedAt: 2026-08-19)。

存储与保留

能力RabbitMQKafkaRocketMQPulsar
消费后是否删除✅ 删除:队列语义,消息 ACK 后即从队列移除,与消费进度强绑定(storage-ha➖ 不删除:消费只推进 offset,记录保留与否只由 retention 决定(storage-ha➖ 不删除:CommitLog 按保留策略清理,与消费进度无关(storage-ha➖ 不删除:ledger 数据按 namespace 保留策略清理,ack 只推进游标(storage-ha
时间/大小保留➖ 不适用:无「保留期」概念;TTL 与 max-length 是队列上限/过期手段,不是历史保留(storage-ha✅ retention.ms / retention.bytes / cleanup.policy 按 Topic 配置(storage-ha✅ CommitLog 文件按保留时间清理(fileReservedTime 默认 72 小时)+ 磁盘水位触发删除(storage-ha✅ namespace 级 retention(时间/大小),可设 0(即删)或无限(配合分层存储)(storage-ha
日志压缩(Compaction)➖ 无此概念✅ log compaction:按 key 只保留最新值,适合状态表/变更日志(storage-ha➖ 无原生 compaction➖ 无原生 compaction
分层存储(Tiered Storage)➖ 无🔧 KIP-405 远程分层存储:需配置 RemoteStorageManager 插件与远端存储(storage-ha🔧 5.x 提供独立部署的分层存储组件,需额外组件与配置(storage-ha🔧 原生 Tiered Storage 能力,需安装 offloader 并为 namespace 配置策略(如 S3/HDFS)(storage-ha

回放能力

能力RabbitMQKafkaRocketMQPulsar
历史回放➖ 不适用:ACK 即删,没有可回读的历史(RabbitMQ Streams 是例外,不在本仓库范围)(storage-ha✅ 原生:按 offset 或时间戳 seek/重置消费位点,多消费组可各自回放(storage-ha实验✅ 原生:重置消费位点(按时间戳/最大最小位点),保留期内可重读(storage-ha✅ 原生:reset-cursor 按时间戳或 message ID 重置订阅游标(storage-ha
位点控制粒度➖ Broker 不暴露消费位点✅ 分区级 offset,任意位置 seek(concepts🔧 消费组 × Topic × 队列级别重置,粒度为队列(concepts✅ 订阅级游标,可到具体 message ID(concepts
多订阅独立回放➖ 消息一旦被某队列 ACK 即消失,不存在多订阅各自重读✅ 每个 Consumer Group 独立位点,互不影响(concepts✅ 每个 Consumer Group 独立消费位点(concepts✅ 每个 Subscription 独立游标,可单独重置(concepts
回放对生产者的影响✅ 回放是纯读操作,不移动日志、不影响其他消费组(storage-ha✅ 重置位点不影响 CommitLog 与其他消费组(storage-ha✅ reset-cursor 只动该订阅游标(storage-ha

积压恢复与回放是两回事:积压是消费者追赶未消费消息,回放是主动把位点拨回已消费过的历史。积压定位见背压与积压,积压恢复实验见 backlog-recovery

脚注:同名异义

  • 「回放 vs 重投递」:回放(replay)是保留期内按位点重读历史,是主动运维/数据修复动作;重投递(redelivery)是消费失败或未确认后的补偿投递。RabbitMQ 有重投递但没有回放;不要把 requeue 叫作回放。
  • 「保留 vs 上限」:Kafka retention、RocketMQ fileReservedTime、Pulsar retention policy 是「历史保留策略」;RabbitMQ 的 TTL/max-length 是「队列内消息的过期与上限」,消息不是被保留下来,而是被丢弃或死信——二者语义相反。
  • 「消费进度」:Kafka 是 offset(数字位点)、RocketMQ 是消费位点(可按时间重置)、Pulsar 是 cursor(可 reset 到 message ID)、RabbitMQ 没有暴露给用户的位点。只有存在位点/游标的产品才谈得上「重置」。

相关页面

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