《RocketMQ 技术内幕:RocketMQ 架构设计与实现原理》核心内容详解

《RocketMQ 技术内幕:RocketMQ 架构设计与实现原理》核心内容详解

书籍概述

《RocketMQ 技术内幕:RocketMQ 架构设计与实现原理》(第 2 版)由丁威、张登、周继锋合著,机械工业出版社出版,是国内首本从源码深度解析 RocketMQ 底层架构与实现原理的技术专著(1)。作者团队为 RocketMQ 官方认定的优秀布道师与核心技术专家,其中丁威是 RocketMQ 社区的资深贡献者,持续深耕 RocketMQ 源码解析与生产落地实践,Apache RocketMQ 创始人冯嘉亲自作序推荐。

作为 RocketMQ 领域的标杆性技术著作,该书第 2 版基于 RocketMQ 4.5 + 版本做了大幅内容更新,覆盖 DLedger 多副本、自动主从切换等核心新特性;在技术视角上,从源码实现、架构设计、工程落地三个维度,将 RocketMQ 的设计思想、底层逻辑与落地技巧完整串联,既解答 "是什么",更透彻说明 "为什么这么设计" 以及 "生产场景下如何用好"(1)

全书共 11 章,划分为三大逻辑模块:

  • 准备篇(第 1 章) :铺垫 RocketMQ 的设计理念、核心目标,以及分布式中间件源码的通用阅读方法与调试技巧;

  • 核心原理篇(第 2~9 章) :全书技术重心,从源码层深度拆解 NameServer 路由中心、消息发送、消息存储、消息消费、消息过滤、顺序消息、主从同步、事务消息等八大核心模块的底层实现;

  • 实战运维篇(第 10~11 章) :聚焦生产落地,讲解集群监控原理、关键指标告警规则、常用运维命令的典型使用场景,以及高可用集群部署、参数调优、故障排查等实战技巧(1)

该书定位并非入门级 API 教程,而是面向有一定 RocketMQ 使用基础,想要从 "会用 API" 进阶到 "懂底层、能调优、会排障" 的中高级技术人员;其核心价值在于将源码逻辑与生产实践深度结合,既讲清架构设计的底层逻辑,也给出让 RocketMQ 实现低延迟、高并发、高可用、高可靠的落地方案(1)


一、RocketMQ 架构设计与核心原理

RocketMQ 采用 "微服务化集群架构" 设计理念,各组件通过轻量化长连接与异步交互实现分工协作,在保证集群整体高可用的同时,将每个组件的复杂度垂直化,这一设计思想贯穿整个技术架构,也是其能支撑万亿级消息流转的底层基础(60)

1.1 核心组件及其功能

RocketMQ 架构由四大核心组件构成,每个组件均可集群部署,实现高可用支撑;从设计层面看,组件间的通信层被最小化,每个组件的职责边界清晰,避免了单点故障的风险。各组件的详细功能与设计细节如下:

  • NameServer:轻量级路由中心

    NameServer 是 RocketMQ 的服务发现与路由管理核心组件,承担整个集群的路由中枢职责,是生产者、消费者定位 Broker 的唯一入口;其设计哲学是 "极致的简单即高可用",采用无状态集群架构,节点间互不通信,通过 Broker 的定时心跳上报实现路由数据的最终一致性,这一设计大幅降低集群运维成本,且能支撑任意水平扩展。

    从职能边界看,NameServer 核心承担两大模块:一是 Broker 管理,它接受所有 Broker 的注册请求,实时维护 Broker 的存活状态、运行时的拓扑信息,以及每个 Broker 对应的 Topic 与队列映射关系;二是路由发现,它为生产者、消费者提供 Topic 的路由查询服务,让客户端能精准定位到消息对应的 Broker 物理节点。

    在具体实现层面,NameServer 与 Broker 保持长连接通道,每个 Broker 启动时会向集群中所有 NameServer 注册自身信息,并维持每 30 秒一次的定时心跳上报;NameServer 收到心跳包后,会在内存中的路由表(包括 Broker 存活信息表、Topic 队列映射表、Broker 地址信息表)里更新对应 Broker 的最近存活时间,这一过程采用了锁粒度极小的读写锁机制,能在保证路由数据实时性的前提下,支撑客户端的高并发路由查询。同时,NameServer 内置了路由兜底策略:如果某个 Broker 连续 2 次心跳超时,NameServer 会在 10 秒内将其从路由表中剔除,此时生产者、消费者客户端会通过定时路由更新机制,感知到路由变化,立即切换到新的 Broker 节点,避免业务流量故障(60)

  • Broker:消息存储与转发核心

    Broker 是 RocketMQ 的消息存储与转发中枢,负责处理生产者的消息写入请求、消费者的消息读取请求,以及所有消息的持久化存储、高可用同步、消费进度维护等核心工作;Broker 采用主从(Master-Slave)集群架构设计,既保证消息写入的高吞吐,也实现了消息存储的高可靠,避免单节点磁盘损坏导致消息丢失。

    从角色分工看,Broker 集群中的节点分为三类:Master 节点负责处理消息的写入与消费查询请求,Slave 节点负责实时从 Master 节点同步消息数据,在 Master 节点故障时顶替其提供消费服务;同步复制组(SYNC_MASTER)的节点会在写入消息后,强制等待 Slave 节点的同步确认,再返回写入成功结果;异步复制组(ASYNC_MASTER)的节点则在写入消息后立即返回结果,不等待 Slave 节点确认,以此兼顾可靠性与写入性能。

    在内部模块设计上,Broker 的通信层基于 Netty 框架封装,实现了多线程的高并发请求处理;存储层采用 "内存映射文件 + 顺序追加写" 的组合方案,保证消息持久化的高性能;HA 层负责主从节点间的消息数据实时同步,以及多副本集群的日志复制与选举;而消费进度管理模块,则会在内存中实时维护每个消费者组的消费进度偏移量,保证消息消费的 Exactly-Once 语义。

    为了支撑高并发场景,Broker 还设计了多层流控机制:当生产者发送消息的 QPS 超过 Broker 的处理阈值,或 Broker 的 PageCache、磁盘 IO、网络带宽资源出现瓶颈时,会触发流控逻辑,将请求延迟处理或直接拒绝,避免节点过载崩溃;此外,Broker 支持对写入的消息进行多种校验,包括消息长度、消息属性格式、消息权限校验,以及 Topic 级的写入流控,进一步提升集群的稳定性(36)

  • Producer:消息生产者

    Producer 是业务系统中消息发送的入口,负责将业务系统产生的消息发送到 Broker 集群;Producer 的设计理念是 "高并发、低延迟、高可靠",支持集群中多 Producer 实例的分布式并行发送,且内置了多重负载均衡与容错机制,在保证消息发送高吞吐量的同时,将业务侧的消息发送延迟降到最低。

    在路由处理层面,Producer 并不会直接与 Broker 建立连接,而是先从 NameServer 集群查询目标 Topic 的路由信息,再将路由信息缓存在本地内存中,后续的消息发送会直接基于缓存的路由信息,选择合适的 Broker 节点建立长连接,这一设计避免了路由查询带来的额外网络开销。为了保证路由的实时性,Producer 会启动一个定时任务,每 30 秒从 NameServer 拉取最新的路由缓存,若发现某 Broker 节点的连接不可用,会自动从路由缓存中剔除该节点,将消息发送请求路由到其他可用 Broker 节点。

    在负载均衡与容错机制层面,Producer 默认采用轮询策略,将同一 Topic 下的消息均匀分发到多个 Broker 节点的队列中,实现集群级的消息存储负载均衡。同时,它内置了故障重试机制:若发送消息到某 Broker 节点失败,会自动重试将消息发送到该 Topic 对应的其他可用 Broker 节点;针对关键业务场景,用户还可以通过同步发送模式,强制等待 Broker 端的写入成功确认,进一步提升消息发送的可靠性。此外,Producer 支持多种发送模式,适配不同业务场景的需求:同步发送模式适用于对可靠性要求极高的场景,比如交易订单创建;异步发送模式适用于对延迟敏感的场景,比如物流状态通知;单向发送模式则适用于对可靠性要求较低但需要极高吞吐量的场景,比如非核心业务的日志消息投递(38)

  • Consumer:消息消费者

    Consumer 是业务系统中消息消费的组件,负责从 Broker 集群读取消息并进行业务处理;其设计理念是 "高并发、低延迟、高可靠消费",支持集群中多 Consumer 实例的分布式并行消费,通过水平扩展提升消息消费的吞吐量。

    在路由处理层面,Consumer 的逻辑与 Producer 类似:并不会直接连接 Broker,而是先从 NameServer 集群获取订阅 Topic 的路由信息,再将路由信息缓存在本地内存中,后续直接与 Broker 节点建立长连接,拉取消息进行消费。同样地,Consumer 也会启动定时任务,每 30 秒拉取最新的路由信息,感知 Broker 集群的节点上下线或扩容变化。

    在消费模式层面,Consumer 支持两种适配不同业务场景的模式:一种是集群消费模式,同一个消费组内的所有 Consumer 实例会分摊消费该 Topic 的队列,保证同一条消息只会被同一个消费组内的一个实例消费,这是日常场景中最常用的消费模式;另一种是广播消费模式,每个 Consumer 实例都会消费该 Topic 的全量消息,适用于需要将同一条消息同步分发到多个业务系统的场景。

    在消费容错层面,Consumer 采用 "拉取 + 长轮询" 的组合方案实现消息消费:既可以主动向 Broker 拉取消息,也可以通过长轮询机制,准实时地接收 Broker 的消息推送。为了保证消费的可靠性,Consumer 会在消息处理成功后,才向 Broker 提交消费进度偏移量;若消息处理失败,会根据重试配置,将消费偏移量重置,等待下次重试消费;若消息重试次数超过最大阈值,会将该消息转入死信队列,避免异常消息持续阻塞消费队列,同时便于后续人工排查问题。此外,Consumer 支持两种消费粒度:一种是基于队列的并行消费,通过多线程提升消费吞吐量;另一种是基于消息的顺序消费,保证消息按发送顺序被业务侧处理(38)

1.2 集群交互流程

RocketMQ 集群中,所有组件的交互都遵循 "NameServer 路由注册与发现、Broker 消息存储、生产者投递、消费者拉取" 的标准协同流程,这一流程是其实现高可用、高并发负载均衡的核心保障。完整的交互流程与设计细节如下:

  1. 集群初始化阶段:NameServer 启动

    首先启动 NameServer 集群,NameServer 节点会默认监听 9876 端口,等待 Broker、Producer、Consumer 的连接请求;由于 NameServer 采用无状态设计,节点间不需要进行任何数据同步,所以可以同时并行启动多个实例,实现水平扩展,提升路由查询的吞吐量。

  2. 路由注册阶段:Broker 注册

    随后启动 Broker 集群,每个 Broker 节点会与集群中所有 NameServer 节点建立长连接,并每隔 30 秒发送一次心跳包,将自身的 Broker 角色、地址、Topic 队列映射信息等注册到所有 NameServer 节点的路由表中;NameServer 收到心跳包后,会更新内存中对应的 Broker 存活表和路由表,记录下该 Broker 的最新存活时间。这一设计的核心目的是,让 NameServer 集群中的所有节点,拥有完全一致的路由元数据信息(63)

  3. 生产者路由发现与消息发送阶段

    Producer 端在发送消息前,会先从本地缓存的路由表中获取 Topic 的路由信息;若本地没有该 Topic 的路由信息,或路由信息已过期失效,它会随机选择一个 NameServer 节点建立连接,主动拉取最新的路由信息并更新本地缓存。随后,Producer 会根据负载均衡策略,从路由信息中选择合适的 Broker 队列,再与对应的 Broker 节点建立长连接,将消息发送过去。Broker 端收到消息后,会先将消息持久化存储到 CommitLog 文件中,再同步到对应的 ConsumeQueue 索引文件;最后根据写入结果,向 Producer 返回写入成功或失败的响应。

  4. 消费者路由发现与消息拉取阶段

    Consumer 端在启动后,会随机选择一个 NameServer 节点建立连接,查询订阅 Topic 的路由信息,并将路由信息缓存在本地内存中;随后,Consumer 会根据负载均衡策略,分配需要拉取的 Broker 队列,再与对应的 Broker 节点建立长连接,拉取消息进行消费。为了保证消费的高可用,Consumer 会定时向 Broker 上报消费进度偏移量;在消费组内的 Consumer 实例发生上下线,或 Topic 的队列数扩容时,会触发消费端的重平衡流程,重新分配每个 Consumer 负责的队列,保证消费的负载均衡。同时,Consumer 会监听 NameServer 的路由变更通知,一旦收到路由变更消息,会立刻重新分配队列,更新本地缓存的路由信息。

  5. 路由下线阶段:Broker 故障感知

    NameServer 集群会每隔 10 秒扫描一次内存中的 Broker 存活表,若发现某个 Broker 节点的存活时间超过 120 秒未更新,会判定该 Broker 节点已故障不可用,将其信息从路由表中剔除;随后,NameServer 会将路由变更事件,主动推送给所有订阅该 Topic 的 Producer 和 Consumer 客户端。客户端收到路由变更通知后,会立即更新本地缓存的路由信息,不再向该故障 Broker 节点发送或拉取消息,保证业务无感知地切换到其他可用节点(38)

这一整套交互流程,通过 "路由信息最终一致、客户端负载均衡、故障服务端主动剔除" 的轻量化设计思想,将集群的故障转移能力完全封装在路由层和客户端层,对业务侧的生产者和消费者完全透明,是 RocketMQ 支撑万亿级消息流转、保障业务高可用的核心基础(36)


二、消息存储与高可用机制

消息存储是 RocketMQ 的核心底层模块,也是其区别于其他消息中间件的关键技术点 ------ 存储层的性能、可靠性、高可用能力,直接决定了整个消息集群的吞吐量、数据可靠性与业务可用率。RocketMQ 采用 "混合型存储架构 + 内存映射文件 + 主从多副本" 的组合方案,实现了消息存储的高可靠、高吞吐、低延迟,在保证消息持久化性能的前提下,将消息存储的延迟控制在毫秒级。

2.1 消息存储架构设计

RocketMQ 的存储架构采用 "全局消息存储文件 + 主题逻辑索引文件" 的分层设计思想,将消息的顺序写入与随机读取分离开,通过 CommitLog、ConsumeQueue、IndexFile 三类文件的协同配合,同时实现高写入吞吐、高消费查询性能、高存储可靠性。这一架构的核心设计逻辑是,所有主题的消息顺序写入同一个存储文件,再通过独立的索引文件,按主题 + 队列的维度构建逻辑索引,避免了按主题分文件存储带来的随机 IO 问题。三类存储文件的具体设计与协同机制如下:

  • CommitLog:全局消息存储文件

    CommitLog 是 RocketMQ 消息存储的核心物理文件,所有 Topic 的所有消息,都会被顺序追加写入到 CommitLog 文件中;这一设计的核心目的,是通过磁盘的顺序写,规避随机写带来的磁盘 IO 性能瓶颈。CommitLog 的单个文件默认最大为 1GB,当一个文件写满后,Broker 会自动生成一个新的 CommitLog 文件,新文件的命名规则为上一个文件的最后一个偏移量;这一文件滚动机制,既保证了消息写入的顺序性,也便于后续的消息归档与过期清理。此外,CommitLog 文件中存储的是消息的完整二进制数据,包括消息的主题、标签、 keys、生产时间、存储时间、消息体等所有元信息,以及消息的物理偏移量;只要消息被写入 CommitLog 并完成刷盘,就意味着消息被持久化成功,后续消费端的读取,都会通过 CommitLog 的物理偏移量定位到完整的消息内容(12)

  • ConsumeQueue:消费逻辑索引文件

    ConsumeQueue 是 RocketMQ 用来加速消息消费的逻辑索引文件,每个 Topic 的每个 Queue 都会对应一个独立的 ConsumeQueue 文件;该文件不存储完整的消息内容,仅记录消息在 CommitLog 中的物理偏移量、消息的二进制长度、消息 Tag 的哈希值,这三个字段作为消息的物理索引,目的是帮助消费者快速定位到要消费的消息在 CommitLog 文件中的具体位置,避免消费者直接扫描 CommitLog 文件带来的全量磁盘扫描开销。与 CommitLog 的全局顺序写不同,ConsumeQueue 是按 Topic+Queue 维度分片写入的:消息被写入 CommitLog 后,Broker 会异步将消息的索引信息,转发到对应 Topic+Queue 的 ConsumeQueue 文件中;这一异步写入设计,不会阻塞消息写入的主流程,同时保证了消费端的查询性能。在消费过程中,消费者先从 ConsumeQueue 文件中读取消息的物理索引偏移量,再根据这个偏移量,直接定位到 CommitLog 文件中的完整消息内容,进行读取;这一 "索引定位 + 物理读取" 的组合方案,将消费端的随机磁盘 IO 降到了最低,也能保证在海量消息堆积下,消费端的查询性能不会明显下降(19)

  • IndexFile:消息查询索引文件

    IndexFile 是 RocketMQ 用来加速消息检索的哈希索引文件,其核心目的是支撑消息的任意属性查询,比如根据消息的唯一业务 Key、消息的 Tag、消息的生产时间范围检索消息。IndexFile 采用哈希索引实现设计,存储了消息的业务 Key 与消息在 CommitLog 中物理偏移量的映射关系;Broker 后台会异步地将消息的业务级唯一 Key(比如订单号、物流单号),转换为索引条目写入 IndexFile,同时将消息的 Tag 哈希值、生产时间戳作为附加索引字段。这一设计可以让消费者或运维人员,根据消息的业务唯一 Key,快速定位到消息的具体存储位置;在运维排查、业务数据回溯或消息轨迹追踪时,可通过消息的业务 Key 或时间范围,快速检索到完整的消息内容,极大提升了排查效率(66)

这一 "混合存储架构" 的核心设计优势在于,通过 CommitLog 的全局顺序写,保证了极高的消息写入性能;通过 ConsumeQueue 的分片索引设计,保证了消息消费的顺序读性能;再通过 IndexFile 的哈希索引设计,支撑了消息的随机检索能力。同时,所有文件的写入都采用顺序追加模式,彻底规避了磁盘随机 IO 带来的性能瓶颈;这也是 RocketMQ 能在保证消息存储可靠性的前提下,支撑高并发消息写入的核心技术基础(18)

2.2 消息刷盘持久化机制

刷盘机制是决定消息存储可靠性与写入性能的关键核心因素 ------ 它决定了消息从 Broker 的内存到磁盘持久化的落盘方式。RocketMQ 支持异步刷盘、同步刷盘两种模式,用户可以根据业务场景对可靠性与性能的权衡需求,灵活配置 Broker 端的刷盘策略;这一策略的配置维度是 Broker 节点,所有写入该节点的 Topic 消息,都会遵循统一的刷盘规则。

两种刷盘模式的底层设计逻辑、性能与可靠性权衡,以及适用场景如下:

  • 异步刷盘(默认模式)

    异步刷盘是 RocketMQ Broker 的默认刷盘模式,其核心设计逻辑是 "内存写即返回":消息写入 Broker 的内存缓存后,会立即返回写入成功的响应给生产者;随后,Broker 后台的异步刷盘线程,会按配置的时间间隔,将内存中的消息批量刷写到 CommitLog 磁盘文件中。在具体实现层面,Broker 的存储层会通过操作系统的 PageCache 机制,将内存中的消息数据,异步批量回写到磁盘文件;这一设计的核心目的,是通过减少磁盘 IO 的次数,极大提升消息写入的吞吐量,降低业务侧的消息发送延迟。但需要注意的是,在异步刷盘模式下,若 Broker 节点发生异常断电,内存中还未及时刷写到磁盘的消息会永久丢失;其可靠性相对较低,适合对吞吐量、延迟要求极高,但对消息丢失容忍度较高的非核心业务场景,比如用户行为日志采集、系统监控数据上报、非核心业务状态通知等场景(20)

  • 同步刷盘

    同步刷盘是 RocketMQ 提供的一种高可靠刷盘模式,其核心设计逻辑是 "磁盘写成功再返回":消息写入 Broker 的内存缓存后,并不会立即返回写入成功响应;而是等待 Broker 的刷盘线程,将该消息强制刷写到 CommitLog 磁盘文件的持久化落盘成功后,才会返回写入成功的响应给生产者。这一设计彻底规避了消息丢失的风险,即使 Broker 节点异常断电,也不会丢失已写入成功的消息;因为只有消息完全落盘后,生产者才会收到成功响应。但同步刷盘会增加消息写入的磁盘 IO 等待开销,导致消息写入的吞吐量降低、延迟升高;这一损失的性能,是换取高可靠性的必要成本。同步刷盘适合对消息丢失零容忍、对延迟的容忍度相对较高的核心业务场景,比如交易订单创建、支付结果通知、金融业务状态流转、核心业务数据同步等场景(20)

为了在异步刷盘的高性能与同步刷盘的高可靠性之间找到平衡,RocketMQ 还提供了刷盘机制的组合配置方案:比如,可以将 Master 节点配置为同步刷盘,Slave 节点配置为异步刷盘;或者将 Master 节点配置为异步刷盘,Slave 节点配置为同步刷盘。通过不同角色节点的刷盘策略组合,既能保证消息写入的高吞吐量、低延迟,又能保证消息存储的高可靠性,将消息丢失的概率降低到近乎为 0。

在底层技术实现层面,RocketMQ 的存储层还使用了两大核心技术,进一步优化了消息持久化的性能与可靠性:一是内存映射文件(MappedByteBuffer)技术,它将磁盘上的 CommitLog、ConsumeQueue、IndexFile 文件,直接映射到 Broker 进程的用户态内存空间;消息写入时,只需要向内存映射地址写入数据,再由操作系统的异步回写机制,将数据批量落盘,避免了用户态到内核态的内存拷贝开销;二是零拷贝(SendFile)技术,在消息消费读取时,直接从 CommitLog 文件的内存映射区域读取数据,再通过网络套接字直接发送给消费者,全程不需要将消息数据拷贝到 Broker 的用户态内存空间,减少了上下文切换与内存拷贝开销,极大提升了消息消费的吞吐量。这两项技术,是 RocketMQ 在存储层实现高吞吐、低延迟的关键技术支撑(18)

2.3 高可用机制:主从同步与多副本

为了保证消息存储的高可靠,以及集群的高可用,RocketMQ 提供了主从同步(Replication)机制和多副本集群(DLedger)机制两类高可用方案,二者分别适配不同级别的业务可靠性需求。其中,主从同步机制是基础的高可靠存储方案,解决的是单节点磁盘损坏导致消息丢失的问题;多副本集群机制是企业级的高可用方案,解决的是节点故障后的自动容灾切换问题,二者的组合可以实现无人工干预的高可用能力。

2.3.1 主从同步机制

RocketMQ 的主从同步机制,是 Broker 节点间的消息数据实时复制机制,其核心设计目标是保证消息数据的多副本存储,避免单节点磁盘损坏导致数据丢失;同时,通过读写分离机制,分担主节点的消息读取压力。在主从架构中,每个 Master 节点都会配备一个或多个 Slave 节点,组成一个复制组;同一个复制组内的所有节点,会拥有完全一致的 Topic 元数据信息,以及完全一致的消息数据副本。

这一机制的底层实现逻辑、高可用支撑细节与生产配置策略如下:

  • 数据同步模式:为了适配不同业务场景的可靠性要求,RocketMQ 的主从架构支持两种数据同步模式,用户可以通过 Broker 配置文件中的 brokerRole 参数,灵活选择同步模式:

    • 异步复制模式(ASYNC_MASTER) :Master 节点在完成消息写入、准备返回响应时,不会等待 Slave 节点同步完成,会立即返回写入成功响应给生产者;随后,Slave 节点会通过定时拉取的方式,从 Master 节点同步最新的消息数据。这一模式的主从同步延迟极低,对消息写入的性能影响最小,但在 Master 节点故障宕机时,Slave 节点可能还未同步完所有消息数据,会存在丢失部分消息的风险;该模式适合对消息写入性能要求极高,但对消息丢失容忍度相对可控的业务场景(17)

    • 同步复制模式(SYNC_MASTER) :Master 节点在完成消息写入后,并不会立即返回写入成功响应;而是等待 Slave 节点成功同步完该消息数据后,再返回写入成功响应给生产者。这一模式下,Master 节点故障宕机时,Slave 节点已经拥有了完整的消息数据副本,不会丢失任何消息;但同步过程会增加网络延迟,导致消息写入的吞吐量降低、延迟升高。该模式适合对消息丢失零容忍、对延迟的容忍度相对较高的核心业务场景(17)

  • 读写分离机制 :为了提升集群的消息消费吞吐量,降低 Master 节点的负载压力,RocketMQ 的主从架构支持读写分离机制。在具体实现层面,当消费者从 Master 节点拉取消息时,若 Master 节点的负载过高,或主从同步的延迟过低,Master 节点会向消费者返回建议拉取的 Slave 节点地址;消费者收到响应后,会自动从 Slave 节点拉取消息进行消费。这一设计将消费端的读流量,分摊到了多个 Slave 节点上,极大减轻了 Master 节点的负载,提升了集群的整体消费吞吐量。需要特别注意的是,在读写分离机制下,消息的消费进度始终会保存在 Master 节点上;消费者在提交消费进度偏移量时,会优先向 Master 节点提交,保证主从节点的消费进度完全一致(17)

  • 故障容灾逻辑 :在主从同步机制下,若 Master 节点故障不可用,Slave 节点会自动补齐主从同步的偏移量,保证拥有完整的消息数据副本;此时,运维人员可以通过命令行工具或管理控制台,手动将 Slave 节点切换为新的 Master 节点,恢复集群的消息写入服务。在切换过程中,消费者会自动从新的 Master 节点(原 Slave 节点)拉取消息,保证消费端的可用性;但这一过程需要人工干预,切换期间集群的消息写入服务会短暂不可用,属于半自动的故障容灾方案(19)

2.3.2 多副本集群机制(DLedger)

为了解决传统主从架构需要人工干预切换的痛点,RocketMQ 在 4.5.0 版本及以后,引入了基于 Raft 一致性协议的多副本集群机制 ------DLedger,它实现了 Broker 复制组内的多副本数据同步与自动主从选举,是 RocketMQ 真正实现无单点故障、高可用不丢失数据的关键支撑。

DLedger 多副本集群的底层设计逻辑、高可用支撑细节与生产落地策略如下:

  • 集群架构设计:DLedger 多副本集群采用的是基于 Raft 协议的对等节点架构,一个复制组内需要包含至少 3 个节点,每个节点的地位完全对等;其中会有一个节点是 Leader 节点,负责处理消息的写入与消费读取请求;其余节点是 Follower 节点,负责实时从 Leader 节点同步消息数据。这一架构的核心设计逻辑是,所有节点都拥有完整的消息数据副本,且节点之间通过 Raft 协议的日志复制机制,保证数据的强一致性;只要复制组内有超过半数的节点存活,整个集群就能正常对外提供服务。

  • 数据同步机制:DLedger 多副本集群的消息数据同步,完全遵循 Raft 协议的核心流程:所有消息写入请求,都会先被路由到 Leader 节点;Leader 节点会先将消息写入到本地的 CommitLog 文件中,然后通过日志复制请求,同步到所有 Follower 节点;Leader 节点会等待超过半数的节点(包括自身)成功写入该消息后,再向生产者返回写入成功的响应。这一多副本同步机制保证了,只要有超过半数的节点写入成功,该消息就不会丢失;即使 Leader 节点故障,其他节点也拥有完整的消息数据副本。

  • 自动主从切换机制:DLedger 多副本集群的核心优势是,实现了故障时的自动主从切换,无需人工干预。在具体实现层面,每个节点都会定时向其他节点发送心跳包,检测节点的存活状态;若 Follower 节点在规定时间内没有收到 Leader 节点的心跳包,会自动触发新一轮的 Leader 选举;集群会从所有同步完最多消息数据的 Follower 节点中,选举出一个新的 Leader 节点,随后更新集群的路由元数据,将写入和消费流量路由到新的 Leader 节点上。这一过程完全自动执行,不需要人工干预,故障恢复时间通常在秒级,业务侧几乎感知不到故障的发生,真正实现了集群的高可用。

  • 生产落地策略:DLedger 多副本集群机制可以与主从同步机制无缝配合,在生产环境中组合使用。例如,可以将 Broker 的复制组部署为 DLedger 多副本集群,同时配置同步消息复制;再结合刷盘策略的组合配置,比如 Master 节点配置为异步刷盘,Slave 节点配置为同步刷盘,就可以在保证消息写入高吞吐量、低延迟的同时,实现消息存储的高可靠,以及故障时的自动容灾切换。


三、事务消息与顺序消息的实现方式

事务消息、顺序消息,是 RocketMQ 区别于其他消息中间件的两大核心特色功能,也是企业级业务场景中最常用的高级消息类型;二者分别解决了分布式系统中 "本地事务与消息发送的原子性问题" 和 "消息发送与消费的顺序性问题",是支撑电商、金融等复杂业务场景的核心技术底座。

3.1 事务消息实现原理

事务消息是 RocketMQ 的核心特色功能之一,它解决的是分布式系统中 "本地事务执行" 与 "消息发送" 的原子性问题 ------ 即 "本地事务执行成功,则消息一定投递成功;本地事务执行失败,则消息一定不投递"。这一特性是分布式场景下,保证各业务节点数据最终一致性的关键支撑,比如电商场景中 "订单创建成功后,扣减库存的消息一定会被准确投递";或金融场景中 "支付订单成功后,账户余额变更的消息一定会被准确投递"。

3.1.1 核心设计思想

RocketMQ 事务消息的核心实现方案,是 "两阶段提交(2PC)+ 事务补偿(Transaction Check)" 的组合机制,这一方案是对 XA、TCC 等分布式事务协议的轻量化改造,在保证强一致性的同时,最大限度降低了对业务流程的侵入性。

这一方案的核心设计逻辑是,将消息的发送分为两个阶段:第一阶段发送半消息(Half Message),第二阶段再根据本地事务的执行结果,提交或回滚半消息;若由于网络闪断、生产者重启导致 Broker 迟迟收不到生产者的二次确认,会通过事务回查机制进行补偿,最终实现本地事务执行与消息发送的原子性 ------ 即 "本地事务执行成功,则消息一定会被投递到消费端;本地事务执行失败,则消息一定不会被投递"。

3.1.2 完整实现流程

事务消息的完整生命周期包含四个核心步骤,其底层实现逻辑与技术细节如下:

  1. 第一阶段:发送半消息(Half Message)

    Producer 端发送事务消息的第一步,是向 Broker 发送 "半消息";半消息是一种特殊的消息类型,它会被 Broker 持久化存储到 CommitLog 文件中,随后被写入到主题名称为RMQ_SYS_TRANS_HALF_TOPIC的特殊半消息消费队列中;但与普通消息不同的是,半消息不会被分发到任何消费者的订阅队列中,对消费端完全不可见 ------ 这一设计的核心目的,是保证本地事务执行完成前,消息不会被消费者消费。半消息发送成功后,Broker 会向 Producer 端返回半消息发送成功的响应;此时,消息的状态在 Broker 端被标记为 "待确认"。

  2. 执行本地事务逻辑

    半消息发送成功后,Producer 端会执行业务侧的本地事务逻辑;比如在电商下单场景中,本地事务会完成订单数据的落库、扣减用户的预库存、预留优惠资源记录等操作。Producer 端的本地事务执行完成后,会根据执行结果,返回三种状态之一给 Broker 端:本地事务执行成功(COMMIT)、本地事务执行失败(ROLLBACK)、本地事务执行状态未知(UNKNOW)。

  3. 第二阶段:提交或回滚半消息

    Broker 端收到 Producer 端的本地事务执行结果响应后,会根据结果对半消息执行相应的操作:

  • 若结果为 COMMIT:表示本地事务执行成功,Broker 会将半消息的状态从 "待确认" 更新为 "可消费",然后将半消息从特殊的半消息队列,移动到该消息对应的真实 Topic 队列中,对消费者可见;随后,消费者端可以正常拉取并消费该消息。

  • 若结果为 ROLLBACK:表示本地事务执行失败,Broker 会直接将半消息从半消息队列中删除,不会将该消息投递到任何真实 Topic 队列中;后续消费者端永远不会消费到该消息。

  • 若结果为 UNKNOW:表示本地事务的执行状态无法确定,Broker 会暂时保留半消息在半消息队列中,后续通过事务回查机制,再次向 Producer 端确认本地事务的最终状态。

  1. 事务补偿机制:事务回查

    事务回查是 RocketMQ 事务消息的核心补偿机制, designed to handle extreme scenarios like network partitions, Producer crashes, or Producer restarts after the first phase. In these cases, the Broker may not receive the second-phase confirmation result from the Producer within the specified timeout period---this is when the transaction checkback mechanism is triggered.

    在具体实现层面,Broker 端会启动一个定时任务,扫描所有存储在半消息队列中且状态为 "待确认" 的半消息;若半消息的存活时间超过了设置的回查免疫时间(默认是 6 秒),则 Broker 会向该消息对应的 Producer 端,发起一个 "事务状态回查" 请求;这个请求会携带该半消息的唯一标识,以及业务侧的相关上下文信息。Producer 端收到回查请求后,会检查本地事务的实际执行状态,并将最新的执行结果(COMMIT/ROLLBACK/UNKNOW)返回给 Broker 端;若 Broker 端收到的是 UNKNOW 状态,会延迟一段时间后再次回查,默认最多回查 15 次;如果仍然无法获取到明确的事务执行结果,会将该半消息的状态标记为 "死亡",不再进行回查。

这一 "两阶段提交 + 事务回查" 的组合机制,通过持久化存储半消息、定时回查补偿,保证了分布式场景下,本地事务执行结果与消息投递的最终一致性。只要 Producer 端的本地事务执行结果最终能被确定,消息的投递结果就一定能与之匹配,实现了事务的 "最终一致";这一机制是支撑跨服务、跨数据库业务场景的核心技术底座(84)

3.1.3 适用场景与技术限制

事务消息的核心价值,是在分布式场景中,将本地事务与消息发送绑定在一个原子操作中,保证业务上下流的最终一致性。其典型适用场景包括:电商场景下的 "订单创建与库存扣减""支付成功与权益开通";金融场景下的 "交易流水记录与账户余额更新";物流场景下的 "运单创建与菜鸟节点通知" 等所有对业务原子性有强需求的分布式场景(32)

但需要明确的是,事务消息并不是无限制适配所有分布式场景,它存在三个明显的技术限制,需要在业务开发时特别注意:

  • 事务消息的生产者,必须实现事务状态回查的逻辑,用于 Broker 端的回查请求,这对业务代码有一定的侵入性;

  • 事务消息仅能保证 "本地事务执行成功后,消息一定被投递到消费端",无法保证消费端的消费结果 ------ 消费端的业务执行结果,需要通过本地事务进行保障;

  • 事务消息的回查机制存在一定的延迟,在极端网络或生产者故障场景下,可能导致消息的投递延迟,无法适配对延迟的容忍度极低的实时业务场景。

3.2 顺序消息实现原理

顺序消息是 RocketMQ 的另一核心特色功能,它解决的是分布式场景中,消息发送与消费的顺序性问题 ------ 保证同一组业务消息,按照发送的先后顺序被消费端处理;这一特性是支撑 "数据增量同步""订单状态流转""流程化业务调度" 等场景的关键,比如在电商订单场景中,需要保证 "订单创建→订单支付→订单发货→订单签收" 的消息顺序被消费端处理。

3.2.1 核心设计思想

RocketMQ 顺序消息的核心设计思想是 "分区有序、全局无序"------ 即保证同一个队列内的消息严格有序,但不保证跨队列的消息有序。这一设计的核心逻辑是,在保证业务所需顺序性的前提下,避免强全局顺序带来的性能衰减,兼顾了顺序性与吞吐性能。

具体来说,RocketMQ 的顺序消息,通过 "发送端固定队列路由"+"存储端顺序写"+"消费端单线程串行处理" 的三层协同机制,实现了分区内的严格顺序;这一方案的设计复杂度较低,同时能支撑极高的消息吞吐量,是工程实现与业务需求权衡后的最优方案。

3.2.2 完整实现流程

顺序消息的实现,需要发送端、存储端、消费端三层的协同配合,三者的核心技术细节如下:

  • 发送端:保证顺序发送与固定队列路由

    发送端需要同时满足两个条件,才能保证消息的顺序性:一是必须使用同步发送模式,避免异步发送因多线程调度导致消息发送乱序;二是需要通过 RocketMQ 提供的MessageQueueSelector接口,实现自定义的队列选择逻辑 ------ 将同一业务标识(如订单号、物流单号)的所有消息,路由到同一个 Topic 的固定队列中。常规的实现方案是,对业务标识(如 orderId)做哈希取模运算,计算出要发送的队列 ID;相同业务标识的消息,计算出的队列 ID 永远相同,这就保证了同一业务的所有消息,都会被发送到同一个队列中。这一步是实现顺序消息的核心前提,若消息发送到不同队列,后续所有顺序性保障都会失效(91)

  • 存储端:保证消息存储的顺序性

    存储端的顺序性保障,由 RocketMQ 的底层存储架构天然支撑:一方面,所有消息都是顺序追加写入到 CommitLog 文件中的,保证了消息存储的全局顺序;另一方面,由于发送端将同一业务的消息固定发送到一个队列,该队列对应的 ConsumeQueue 索引文件,也会按照消息发送的顺序,将消息的索引记录追加写入;这就保证了,同一个队列内的消息,在存储层的物理存储顺序,与发送顺序完全一致。即使 Broker 端主从切换或负载均衡,也不会改变队列内消息的存储顺序,从底层物理存储上,筑牢了顺序性的基础(18)

  • 消费端:保证顺序消费与处理

    消费端的顺序性保障,由 RocketMQ 的消费者机制与业务侧的协同配合实现:首先,消费端需要使用MessageListenerOrderly顺序消费监听器,来监听并处理消息;这个监听器会给当前消费的队列加一个分布式内部独占锁,保证同一个队列,同时只会被一个消费端线程拉取和处理;其次,消费端需要采用单线程串行处理该队列内的所有消息 ------ 这就保证了,消息的处理顺序,与存储层的存储顺序完全一致。如果消费端处理消息失败,会自动重试当前消息,直到处理成功,再拉取下一条消息;这就避免了消息处理失败导致的顺序被破坏。需要特别注意的是,如果消费端采用多线程、异步线程池或并行流处理消息,会破坏顺序性;必须单线程串行处理,才能保证顺序性。

3.2.3 适用场景与技术限制

顺序消息的核心价值,是保证同一业务逻辑内的消息,按发送顺序被消费端处理;这一特性适配所有对业务流程有严格顺序要求的场景,比如电商场景中的订单状态流转、商品库存增减;分布式数据库场景中的增量数据同步,按 binlog 执行顺序同步到数据仓库;流程调度场景中的任务节点上下游执行顺序保障等。

但需要明确的是,顺序消息也存在天然的技术限制,需要在业务开发时特别注意:

  • 顺序消息的并行度,受限于 Topic 的队列数 ------ 同一个队列内的消息只能单线程串行处理,若要提升消费吞吐量,需要增加 Topic 的队列数;

  • 顺序消息的生产和消费性能,低于普通消息 ------ 因为发送端需要同步发送,消费端需要单线程串行处理,无法充分利用多核 CPU 的性能;

  • 顺序消息仅能保证同一个队列内的消息有序,无法保证全局跨队列的消息有序;若需要严格的全局顺序,需要将所有消息发送到同一个队列中,但这会极大降低消息吞吐量。


四、性能优化与运维管理

在生产环境中,RocketMQ 的高性能、高可用、高可靠,不是仅靠底层架构支撑,而是依赖合理的参数配置、集群架构优化、日常运维巡检与故障排查策略。《RocketMQ 技术内幕》一书中,结合大量生产级实战案例,总结了性能优化与运维管理的落地标准与技巧。

4.1 性能优化方向

性能优化的核心目标,是在保证消息可靠性的前提下,提升集群的消息读写吞吐量、降低消息发送与消费的延迟,同时保障集群的稳定性。书中从生产端、存储端、消费端、操作系统底层四个维度,给出了生产级的优化方案。

4.1.1 生产端优化

生产端的优化目标,是在保证消息发送可靠性的前提下,提升消息发送的吞吐量、降低发送延迟;核心优化策略与技术细节如下:

  • 合理设置发送模式:根据业务场景的可靠性与延迟要求,灵活选择消息发送模式:对可靠性要求极高的场景,采用同步发送模式;对延迟敏感、吞吐量要求高的场景,采用异步发送模式;对非核心业务、吞吐量要求极高的场景,采用单向发送模式。

  • 调整超时时间与重试机制:根据业务的实际网络环境、消息大小,合理设置生产者的发送超时时间 ------ 默认是 3 秒,建议将其设置为业务接口超时时间的一半;同时,需要合理设置发送失败的重试次数,开启故障自动切换,在发送消息到某 Broker 节点失败时,自动切换到其他可用节点,避免流量故障。

  • 增大客户端的底层发送参数:根据业务的实际并发量,适当调整生产者的底层发送参数:包括设置与 Broker 连接的最大连接数、单个消息的最大大小、批量发送的最大消息数;将消息发送的底层缓冲区大小,调整为业务平均消息大小的 2-4 倍;同时,启用消息压缩机制,默认是 LZ4 压缩算法 ------ 通过压缩消息,降低网络传输的开销,提升消息发送的吞吐量。

  • 优化路由缓存更新间隔:将生产者的本地路由缓存更新间隔,从默认的 30 秒调整为 10 秒;同时,开启 Broker 故障感知的快速失效机制,在 Broker 节点故障时,能最快感知到路由变化,及时切换到可用节点,减少消息发送失败的概率。

4.1.2 存储端优化(Broker)

存储端是 RocketMQ 性能的核心瓶颈点,存储端的优化决定了整个集群的吞吐量、延迟与可靠性;核心优化策略与技术细节如下:

  • 合理配置刷盘策略与复制策略:这是影响存储层性能与可靠性的最关键参数。根据业务场景的可靠性与吞吐量要求,组合配置刷盘策略与主从复制策略:对可靠性要求极高的场景,建议采用 "同步复制 + 异步刷盘" 的组合方案;对吞吐量要求极高、可靠性要求一般的场景,建议采用 "异步复制 + 异步刷盘" 的组合方案;对消息丢失零容忍的场景,建议采用 "同步复制 + 同步刷盘" 的组合方案。

  • 调整存储底层文件配置:根据 Broker 节点的磁盘容量、消息业务周期,适当调整存储底层的关键参数:

    • 将 CommitLog、ConsumeQueue、IndexFile 的存储路径,分别挂载到不同的 SSD 磁盘目录下,避免多个文件在同一块磁盘上竞争 IO 资源;

    • 适当调整 CommitLog 文件的预分配大小,默认是 1GB,建议调整为 2GB,减少文件的创建、内存映射与销毁次数;

    • 调整 CommitLog 文件的删除时机,默认是每天凌晨 4 点,结合业务的低峰期设置;

    • 开启文件的预分配机制,提前格式化磁盘空间,避免运行时的空间分配开销;

    • 内存映射文件的最大大小,建议设置为 Broker 节点内存的一半,提升内存映射的效率。

  • 优化 Broker 的底层线程池参数:根据 Broker 节点的 CPU 核心数、负载情况,调整底层线程池的关键参数:

    • 处理消息发送请求的线程池大小(sendMessageThreadPoolNums),建议设置为 CPU 核心数的 2-4 倍;

    • 处理消息拉取请求的线程池大小,建议设置为 CPU 核心数的 2-4 倍;

    • 处理心跳请求的线程池大小,建议设置为 CPU 核心数的 1-2 倍;

    • 同时,将 Broker 的单个处理请求的最大并发数,设置为线程池核心大小的 2 倍;启用 Broker 端的快速失效机制,在线程池队列积压超过阈值后,快速拒绝新请求,避免节点过载崩溃。

  • 优化存储层的流控机制配置:根据 Broker 节点的内存、磁盘 IO、网络带宽的实际负载情况,设置合理的流控阈值:

    • PageCache 的繁忙阈值,建议设置为 70%,在 PageCache 使用率超过阈值后,自动流控生产者的发送请求;

    • 磁盘 IO 的使用率阈值,建议设置为 80%;

    • 网络带宽的使用率阈值,建议设置为 80%;

    • 同时,启用 Broker 的流控日志,记录流控的详细过程,便于后续排查问题。

4.1.3 消费端优化

消费端的优化目标,是提升消息消费的吞吐量,降低消息堆积的概率,同时保证消费的可靠性;核心优化策略与技术细节如下:

  • 合理配置消费端的底层参数:根据业务的消费能力、单条消息的处理时长,调整消费端的关键参数:将单次拉取消息的最大条数(pullBatchSize)从默认的 32 条,调整为 64~128 条;将拉取消息的底层流控阈值,设置为消费端处理能力的 2-3 倍;将消费端线程池的核心线程数和最大线程数,设置为 CPU 核心数的 2-4 倍;同时,设置合理的消费超时时间,避免消息被长时间挂起,导致重复消费。

  • 优化消费端的并行度与负载均衡:根据 Topic 的队列数、消费端的机器数,合理设置消费端的并行度:保证每个消费端实例,至少分配到一个队列;同时,采用基于业务标识的哈希分配策略,将队列均匀分配给多个消费端实例,实现消费端的负载均衡。

  • 启用批量消费机制:在业务侧的消息处理逻辑支持的前提下,尽量采用批量消费模式 ------ 将单次拉取的消息数量设置为业务的批量处理上限,减少消费端与 Broker 端的交互次数,提升消费吞吐量。

  • 优化消费进度提交机制:根据业务的消费可靠性要求,选择合理的消费进度提交模式:启用边消费边提交模式,降低消息重复消费的概率;或开启异步提交模式,提升消费的吞吐量。若业务侧的消费能力较弱,建议将消费进度提交间隔设置为业务处理耗时的 2-3 倍,避免消费进度提交过于频繁带来的性能开销。

  • 合理使用消息过滤机制:在业务侧消费消息前,在 Broker 端对消息进行过滤 ------ 利用消息的 Tag 属性,在 Broker 端过滤掉不需要的消息;或使用 SQL92 表达式,在 Broker 端基于消息的属性进行过滤。这一方案可以减少 Broker 端到消费端的网络传输开销,避免消费端收到不需要的消息,提升消费吞吐量。

4.1.4 操作系统底层优化

RocketMQ 的高性能,依赖底层操作系统的网络、磁盘、内存资源的配置;书中给出了生产环境下的操作系统级标准优化配置:

  • 内存配置:将 Broker 进程的最大堆内存设置为系统物理内存的一半,保留足够的内存给操作系统的 PageCache;同时,将系统的 dirty 页写入阈值设置为 10%,降低 PageCache 的污染概率;将内存映射文件的最大数量,调整为业务预期的并发量的 2-4 倍。

  • 磁盘配置:使用 SSD 磁盘存储 CommitLog、ConsumeQueue、IndexFile 文件,提升磁盘 IO 性能;将存储日志目录的挂载方式设置为 noatime,关闭磁盘文件的访问时间记录,减少磁盘 IO 开销;同时,将磁盘的调度算法设置为 deadline,提升顺序写的性能。

  • 网络配置:调整操作系统的网络参数,将网络连接的最大发送和接收缓冲区大小设置为 16MB;启用 TCP 的 SYN Cookie 机制,防止网络泛洪攻击;将 TCP 的 TIME_WAIT 状态的连接回收超时时间设置为 10 秒;将网络端口的可用范围扩大到 1024-65535,增加网络连接的端口数量;同时,启用 Netty 的 Epoll 机制,提升网络通信的性能。

  • 文件句柄配置:增大操作系统的单个进程允许的最大文件句柄数 ------ 在 /etc/security/limits.conf 文件中,将 nofile 参数设置为 655350,避免因文件句柄数不足,导致无法创建新文件或网络连接;这一问题在生产环境中,是导致 Broker 节点异常、集群的存储性能衰减的最常见原因之一。

4.2 运维管理策略

RocketMQ 集群的日常运维,是保障业务高可用的核心环节;书中结合大量生产级的故障排查案例,总结了集群部署、日常监控、常用运维命令、生产级故障排查的标准策略。

4.2.1 集群架构部署最佳实践

集群架构的合理设计,是后续运维工作极简的核心前提,书中给出了生产级集群架构的部署标准:

  • 高可用集群部署:采用双机房或三机房部署模式,将每个 Broker 复制组的节点部署在不同机房;每个复制组至少包含 2 个 Master 节点和 2 个 Slave 节点,或部署为 DLedger 多副本集群(至少 3 个节点);将 NameServer 集群部署在不同的可用区,设置至少 3 个 NameServer 节点;所有节点采用高规格的云服务器或物理机,保证资源隔离,避免单可用区故障导致集群不可用。

  • 角色分离部署:将 NameServer、Broker、监控控制台(rocketmq-dashboard),分别部署在不同的物理节点或虚拟机上;每个 Broker 节点的角色明确,Master 节点只负责写入和消费读取,Slave 节点只负责备份或读流量,避免不同角色的进程竞争系统资源;这一设计可以将故障的影响面降到最小,且便于后续的集群扩容、性能调优。

  • 存储目录独立挂载:将 CommitLog、ConsumeQueue、IndexFile 的存储目录,分别挂载到不同的 SSD 磁盘上;这一设计可以避免多个文件在同一块磁盘上竞争 IO 资源,提升存储层的读写性能;同时,便于后续的磁盘容量扩容和性能故障定位,减少不同文件的 IO 相互影响的概率。

4.2.2 日常监控与告警核心指标

日常监控是保障集群稳定运行的核心手段,书中明确了必须监控的四大类核心指标,以及对应的告警阈值设置建议。这些核心指标是:

  • 消息发送 / 消费核心指标:消息发送的 TPS、消息发送的响应时间、消息发送的成功率、消息消费的 TPS、消息消费的响应时间、消息消费的失败率、消费堆积的消息数量、消费堆积的持续时间。这类指标直接反映了业务侧的表现。

  • Broker 存储层指标:CommitLog 文件的磁盘写入耗时、ConsumeQueue 文件的磁盘读取耗时、磁盘 IO 的使用率、磁盘的容量水位、PageCache 的使用率、内存映射文件的数量、消息的主从同步延迟时间。这类指标直接反映了存储层的性能与可靠性。

  • Broker 连接层指标:Producer 和 Consumer 的连接数、网络的丢包率、网络的重传率、网络请求的处理耗时、线程池的活跃线程数、线程池的队列积压数、线程池的拒绝请求数。这类指标直接反映了网络层和请求处理层的稳定性。

  • NameServer 路由指标:Broker 的注册数量、路由表的大小、路由查询的耗时、路由更新的频率、Broker 的存活状态。这类指标直接反映了集群路由层的稳定性。

告警配置需要结合业务的实际场景和容忍度设置,书中给出了生产级的通用告警规则模板:消息发送成功率低于 99.9%、消费堆积的持续时间超过 30 秒、磁盘容量水位超过 80%、磁盘 IO 使用率超过 80%、PageCache 使用率超过 70%、主从同步延迟超过 5 秒、Broker 的存活状态异常、线程池的拒绝请求数大于 0,都需要触发告警通知。

4.2.3 常用运维命令与运维操作

RocketMQ 提供了mqadmin运维管理工具,支持几乎所有集群运维操作;书中详细讲解了生产环境中最常用的运维命令,以及它们的典型使用场景。核心命令与使用场景如下:

  • 集群与 Broker 管理类命令:查询集群整体状态、查询 Broker 的运行时信息、查询 Broker 的配置信息、更新 Broker 的配置参数、管理 Broker 的读写权限、设置 Broker 的写入速率阈值。

  • Topic 管理类命令:创建或更新 Topic 的配置信息、查询 Topic 的路由信息、修改 Topic 的读写队列数、删除 Topic、查看 Topic 的消息进度、查询 Topic 对应的所有消费者组。

  • 消息查询与管理类命令:按消息的唯一 Key 查询消息、按消息的偏移量查询消息、按消息的时间范围查询消息、重新发送消息、导出消息的详细内容。

  • 消费者管理类命令:查询消费者组的消费进度、查看消费者的实际消费状态、重置消费者的消费进度、删除消费者组、暂停或恢复消费者的消费权限。

书中强调,所有运维命令执行前,必须增加-n参数指定 NameServer 集群地址,生产环境执行高危命令前,必须先在测试环境验证,再在生产环境执行,避免误操作导致业务故障。

4.2.4 生产级故障排查典型流程

书中结合大量生产级的故障排查案例,总结了 RocketMQ 集群最常见的三类故障的标准排查思路。

  • 消息发送故障排查:若消息发送失败,先检查 Producer 的路由缓存是否正常;再检查 NameServer 集群的运行状态、网络端口是否正常,确认 Broker 集群的负载状态、是否有线程池积压、是否有磁盘 IO 或 PageCache 瓶颈;最后检查 Broker 的连接日志、消息写入请求的处理日志,定位具体原因。

  • 消息消费故障排查:若消息消费失败或出现消费堆积,先检查消费者组的消费进度是否正常;再检查消费者的路由缓存、与 Broker 的网络连接是否正常,确认消费端的拉取请求配置、消息处理逻辑是否存在性能瓶颈;再检查 Broker 端的主从同步状态、ConsumeQueue 读取性能、消息堆积量;最后查看消费端的详细日志,确认是否存在消息处理异常,或序列化 / 反序列化异常。

  • Broker 存储层故障排查:若 Broker 节点宕机或存储性能骤降,先检查节点的磁盘容量、磁盘 IO 负载、内存使用情况、网络带宽资源;再检查 CommitLog、ConsumeQueue、IndexFile 文件的磁盘权限,以及文件句柄数、内存映射文件数是否达标;随后检查 Broker 的线程池积压情况、主从同步的复制延迟;最后根据日志中的具体错误码,定位到具体的故障原因。


五、与其他消息队列的对比分析

《RocketMQ 技术内幕》一书中,从架构设计、性能表现、可靠性、功能特性、运维成本、生态适配等核心维度,将 RocketMQ 与业界主流的两款消息中间件 Kafka、RabbitMQ 进行了深度对比;这一对比是技术选型时的重要参考依据。

5.1 核心差异对比

书中的核心对比结果如下:

维度 RocketMQ Kafka RabbitMQ
定位场景 金融、电商等微服务场景,核心业务的解耦、事务、顺序、消峰 大数据、日志采集场景,高吞吐的数据流传输 企业级集成场景,复杂路由、多协议适配
通信协议 自研基于 TCP 的自定义协议 基于 TCP 的二进制协议 AMQP、STOMP、MQTT 等多协议
存储模型 主题 - 队列 - 消息,混合存储架构(CommitLog+ConsumeQueue) 主题 - 分区 - 消息,分区存储架构 交换机 - 队列 - 消息,结构化存储架构
存储策略 顺序写磁盘 + 内存映射 + 零拷贝,支持多副本同步复制 顺序写磁盘 + 零拷贝,支持多副本异步复制 顺序写磁盘 + 内存索引,支持多副本同步复制
同步复制模式 支持同步、异步复制,DLedger 多副本集群 仅支持异步复制 支持同步、异步复制
事务消息 原生支持两阶段提交 + 事务回查,保证原子性 仅支持流处理的幂等性,不支持分布式事务 需通过插件或业务补偿实现,不支持原生事务
顺序消息 原生支持分区顺序消息 原生支持分区内顺序消息 原生支持队列内顺序消息
延迟 / 定时消息 原生支持 18 个预设级别,任意精度延迟 不支持,需通过外围组件扩展 支持插件级的死信队列方案
消息过滤 Broker 端基于 Tag、SQL92 表达式过滤,低开销 客户端在消费端过滤,高网络开销 Broker 端基于 Exchange 路由规则过滤,低开销
高可用架构 NameServer 轻量级注册中心,Broker 主从 / 多副本集群 KRaft 一致性注册中心,Broker 分区集群 Erlang 语言原生集群架构,镜像队列
吞吐量 10 万级 TPS,依赖磁盘、网络配置 百万级 TPS,依赖磁盘、网络配置 万级 TPS,受限于 Erlang 语言的性能瓶颈
消息延迟 毫秒级 毫秒级 微秒级
运维复杂度 中等,自带命令行工具、管理控制台,资源隔离性好 中等,依赖 ZooKeeper(旧版本),新组件运维成本高 低,管理控制台功能丰富,安装部署简单
生态适配 原生适配 Java、Go、C++ 等多语言,无缝融入微服务生态 原生适配大数据流处理生态,与 Flink、Spark 集成性好 原生适配多协议,与企业级旧系统集成性好

需要说明的是,上述对比中的吞吐量、延迟等数据,都是在相同的硬件资源配置下,基于官方标准测试用例得出的结果;实际生产环境下的性能,受消息大小、副本数、刷盘策略、业务逻辑复杂度、基础设施资源等多个因素影响,会存在一定差异。

5.2 优劣势总结

基于上述多维度对比,书中总结了 RocketMQ 的核心优劣势,以及对应的适用场景。

  • 核心优势
  1. 功能全面,适配企业级业务场景:原生支持事务消息、顺序消息、延迟消息、死信队列、消息重试、广播消费等高级特性,能满足金融、电商等复杂业务场景的多样化需求;这是其他消息中间件无法比拟的核心优势。

  2. 高可靠、高可用,保障业务数据安全:支持同步刷盘、同步复制、DLedger 多副本集群、自动主从切换等机制,能做到集群无单点故障,消息丢失概率为近乎 0;在可靠 c 性与可用性之间,实现了极佳的平衡。

  3. 性能优异,适配大规模业务场景:基于混合存储架构、内存映射文件、零拷贝技术,实现了十万级的消息吞吐量、毫秒级的消息延迟,足以支撑大多数企业级业务的大规模流量。

  4. 运维成本可控,适配生产级部署:提供完善的命令行工具、管理控制台、监控告警集成方案;基于主从 / 多副本集群架构,扩容缩容、故障切换、版本升级流程都可以通过自动化脚本完成,运维成本可控,适配生产级大规模集群部署。

  5. 生态适配性好,融入主流技术栈:原生适配多语言客户端、多协议,无缝融入 Spring Cloud、Dubbo 等主流微服务框架;支持与大数据、监控、链路追踪等外围生态系统的无缝集成。

  • 核心劣势
  1. 对大数据场景的适配性较弱:吞吐量低于 Kafka,不适合 TB 级的海量数据场景;与大数据生态的集成适配性,弱于 Kafka。

  2. 资源消耗较高:基于 Java 开发,内存、CPU 资源的消耗,比 Erlang 开发的 RabbitMQ 高;在低资源配置的环境下,性能衰减会比较明显。

  3. 高级特性存在使用限制:事务消息的回查逻辑对业务代码有侵入性;顺序消息的吞吐量,受限于队列数和消费并行度;延迟消息仅支持 18 个预设级别,不支持任意精度的延迟。

  4. 社区与生态活跃度较低:社区活跃度、版本迭代速度、周边生态的丰富性,低于 Kafka;跨语言的客户端支持度,弱于其他消息中间件。

5.3 选型建议

书中基于多维度对比,给出了三类典型业务场景的消息中间件选型建议。这一选型建议,是从实际业务场景的需求出发,在可靠性、性能、成本之间找到最佳平衡。

  • 优先选择 RocketMQ 的场景:业务场景对消息的可靠性、一致性、可用性有极高要求,比如金融、电商、支付、物流等核心业务场景;或需要原生支持事务消息、顺序消息、延迟消息、死信队列等高级特性;或技术栈以 Java、Go 为主,希望降低运维成本,掌控底层技术细节;此时,RocketMQ 是最佳选型。

  • 优先选择 Kafka 的场景:业务场景对吞吐量有极高要求,比如日志采集、实时数据传输、大数据、实时计算场景;或需要与大数据生态做深度集成;或消息的生命周期极短,不需要过高的可靠性保障;此时,Kafka 是最佳选型。

  • 优先选择 RabbitMQ 的场景:业务场景需要复杂的消息路由规则、多协议适配;或技术栈以非 Java/Go 语言为主;或业务规模较小,希望消息中间件运维成本极低,快速上线;此时,RabbitMQ 是最佳选型。


六、总结

《RocketMQ 技术内幕》是 RocketMQ 领域的里程碑式著作,其技术价值远高于普通的入门 API 教程;它不是简单介绍 RocketMQ 的 API 使用方法,而是从源码架构、实现原理、生产落地三个维度,完整剖析了 RocketMQ 的核心技术思想 ------ 包括 "轻量级路由注册中心""混合存储架构""多副本同步复制""事务消息补偿机制""顺序消息分区有序" 等核心设计,以及这些技术细节背后的工程权衡;并通过大量生产级的实战案例,总结了让 RocketMQ 实现低延迟、高并发、高可用、高可靠的落地方案。

该书的核心价值在于,它将 RocketMQ 的架构设计、关键技术实现、运维优化技巧完整串联,带领读者从 "使用 API" 的基础认知,进阶到 "理解底层设计" 的技术深度;再到 "生产级调优排障" 的工程能力提升;做到了 "理论源码解析 + 生产落地实践" 的双重结合。这对于想要深入理解 RocketMQ 底层原理、在生产环境中稳定落地 RocketMQ、或者是要进行技术架构选型的技术人员,都是不可多得的技术参考资料。

对于有一定 RocketMQ 使用基础的技术人员,该书建议的学习路径是:先掌握核心架构设计思想,再剖析消息发送、存储、消费的全链路机制,再深入事务消息、顺序消息的高级特性实现原理;结合源码部署一套本地调试环境,在阅读过程中,对照源码 debug 学习理解;最后,结合运维篇的知识,在生产环境中实践调优、排障,巩固落地技术能力。

读者对象:本书适合所有使用 RocketMQ 的技术人员,以及对分布式消息中间件技术感兴趣的技术人员,包括微服务架构师、后端开发工程师、运维工程师、技术支持工程师;也可以作为高等院校计算机相关专业的中间件技术参考资料;或作为企业级技术架构选型的参考用书。

本书特色

  • 从源码角度深度剖析 RocketMQ 的架构设计与实现原理,讲清 "为什么这么设计",而非简单的 "如何使用";

  • 覆盖 RocketMQ 所有核心特性,包括事务消息、顺序消息、主从同步、多副本集群、消息存储等核心技术点;

  • 结合大量生产级的实战案例,总结运维管理、性能调优、故障排查的最佳实践;

  • 由 RocketMQ 官方核心布道师撰写,官方创始人作序推荐,内容权威,贴合社区技术发展方向;

  • 附录中提供了完整的配置参数、运维命令清单,可作为生产环境运维的随手查阅参考手册。

参考资料

1 RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)-正版小说电子书在线阅读-QQ阅读https://book.qq.com/book-detail/40935686

2 RocketMQ技术内幕:RocketMQ架构设计与实现原理-丁威、周继锋-软件工程及软件方法学http://pweb.d.zhangyue01.com/index.php?bid=11751570&ca=bookdetail.index&pca=Chapter.Index

3 Apache RocketMQ从入门到实战http://wiki.okami.top/lib/exe/fetch.php?media=blog%3Aapache_rocketmq_从入门到实战.pdf

4 【新书速递】如何快速掌握RocketMQ技术内幕 | 文末送书 - 墨天轮https://www.modb.pro/db/210682

5 本博客阅读指南_中通 丁威 mq博客-CSDN博客https://blog.csdn.net/prestigeding/article/details/88768835

6 书目百科https://book.cppinfo.cn/Encyclopedias/home/index?id=4444548

7 保正版!RocketM技术内幕 RocketM架构设计与实现原理 第2版9787111690924机械工业出版社丁威,张登,周继锋_孔夫子旧书网https://mbook.kongfz.com/418934/10233998680/

8 丁威周继锋-当当图书https://search.dangdang.com/?category_path=01.54.00.00.00.00&key2=%B6%A1%CD%FE%D6%DC%BC%CC%B7%E6&medium=01

9 吃透 RocketMQ-阿里云开发者社区https://developer.aliyun.com:443/article/1714398

10 深入 RocketMQ 内核:事务消息------分布式事务的终极解法(四) - 佛祖让我来巡山 - 博客园https://www.cnblogs.com/sun-10387834/p/21303394

11 Apache RocketMQ从入门到实战http://wiki.okami.top/lib/exe/fetch.php?media=blog%3Aapache_rocketmq_从入门到实战.pdf

12 RocketMq消息存储https://www.iesdouyin.com/share/video/7610705289880381177

13 万字长文说明RocketMQ底层原理实现_rocketmq架构图-CSDN博客https://blog.csdn.net/qq_39032307/article/details/148768750

14 消息中间件进阶:深入 RocketMQ 存储与原理(一) - 佛祖让我来巡山 - 博客园https://www.cnblogs.com/sun-10387834/p/21301991

15 事务消息 | RocketMQhttps://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/

16 消息存储和清理机制 | RocketMQhttps://rocketmq.apache.org/zh/docs/featureBehavior/11messagestorepolicy/

17 RocketMQ HA机制(主从同步)_slavereadenable-CSDN博客https://blog.csdn.net/prestigeding/article/details/93672079

18 RocketMQ 内容详解【三、源码篇(深度剖析与实现细节 · 机制扩展版)】 - NeoLshu - 博客园https://www.cnblogs.com/neolshu/p/19120681

19 Apache RocketMQ 源码解析http://wiki.okami.top/lib/exe/fetch.php?media=blog%3Aapache_rocketmq_源码解析.pdf

20 面试官:端午抢票订单用MQ了,消息丢了怎么办?候选人:不会丢吧------面试官:你确认?#程序员 #Java #Java面试 #后端面试 #程序员面试https://www.iesdouyin.com/share/video/7650795858283269391

21 消息中间件进阶:深入 RocketMQ 存储与原理(一) - 佛祖让我来巡山 - 博客园https://www.cnblogs.com/sun-10387834/p/21301991

22 CommitLoghttps://github.com/web1992/read/blob/main/rocketmq/rocketmq-commit-log.md

23 万字长文说明RocketMQ底层原理实现_rocketmq架构图-CSDN博客https://blog.csdn.net/qq_39032307/article/details/148768750

24 RocketMQ源码解析:主从同步和读写分离实现_51CTO博客_mob64ca14157da7的技术博客_51CTO博客https://blog.51cto.com/u_16213705/14539365

25 RocketMQ:强调事务与顺序一致性的分布式消息队列_rocketmq 强调支持分布式事务消息-CSDN博客https://blog.csdn.net/xike1024/article/details/154322904

26 RocketMQ 内容详解【五、事务与顺序消息线程机制】 - NeoLshu - 博客园https://www.cnblogs.com/neolshu/p/19120311

27 事务消息 | RocketMQhttps://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/

28 别再说"单队列单消费者"了 RocketMQ 顺序消息的底层逻辑,90% 的人都搞错了#java #java面试 #编程 #后端开发 #程序员https://www.iesdouyin.com/share/video/7670834548569017652

29 顺序消息发送 | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/producer/03message2/

30 探索RocketMQ:客户端编程模型的核心要素_hochie的技术博客_51CTO博客https://blog.51cto.com/u_13066/14713356

31 《RocketMQ 官网》阅读笔记 RocketMQ 普通消息 延时消息 顺序消息 事务消息-CSDN博客https://blog.csdn.net/Rockandrollman/article/details/163241504

32 RocketMQ 完全指南:从入门到原理到生产实战、八股面试 - 技术栈https://jishuzhan.net/article/2028651636961378305

33 source-code-hunter/docs/rocketmq/rocketmq-nameserver-broker.md at main · linkeee/source-code-hunter · GitHubhttps://github.com/linkeee/source-code-hunter/blob/main/docs/rocketmq/rocketmq-nameserver-broker.md

34 【全网首发】MQ系列4:NameServer 原理解析https://heapdump.cn/article/4422626

35 Java-213 RocketMQ(MetaQ)演进与核心架构:NameServer/Broker/Producer/Consumer 工作机制-CSDN博客https://blog.csdn.net/w776341482/article/details/156258737

36 RocketMQ:阿里巴巴分布式消息中间件详解及关键组件-CSDN博客https://blog.csdn.net/hsq568853512/article/details/121070805

37 初识RocketMQ | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/introduction/02whatis/

38 12.2(RocketMq)Rocket概念_rocketmq怎么读-CSDN博客https://blog.csdn.net/weixin_46401545/article/details/122316886

39 What is RocketMQhttps://rocketmq.apache.org/docs/4.x/introduction/02whatis/

40 一文读懂 RocketMQ 工作流程:从消息发送到消费的全链路解析-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/2574787

41 RocketMQ-技术详解 - hanease - 博客园https://www.cnblogs.com/hanease/p/19690801

42 基本最佳实践 | RocketMQhttps://rocketmq.apache.org/zh/docs/bestPractice/01bestpractice/

43 阿里云专有云飞天企业版消息队列 MQ 运维指南(RocketMQ)产品版本:v3.18.0文档版本:20230414http://apsara-doc.oss-cn-hangzhou.aliyuncs.com/apsara-pdf/enterprise/v_3_18_0/ons/zh/rocketmq-apsarastack-operation-guide.pdf

44 【RocketMQ全面解析】架构原理、消费类型、性能优化、环境搭建_rocketmq、kafka、oceanus、mysql、clickhouse怎么组架构-CSDN博客https://blog.csdn.net/weixin_44262492/article/details/153286259

45 RocketMQ 生产故障实录:system busy 背后是三层瓶颈的叠加 - Ai拆代码的曹操 - 博客园https://www.cnblogs.com/skills1024/p/21057399

46 Admin Tool | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool/

47 运维管理https://github.com/apache/rocketmq/blob/main/docs/cn/operation.md

48 RocketMQ 面试备战指南_rocketmq面试-CSDN博客https://blog.csdn.net/u011019141/article/details/146485535

49 RocketMQ、RabbitMQ、Kafka 全面对比与主流程深度剖析_kafka 对比-CSDN博客https://blog.csdn.net/weixin_39863120/article/details/148738918

50 RocketMQ高性能揭秘:承载万亿级流量的架构奥秘|得物技术_RocketMQ_得物技术_InfoQ写作社区https://xie.infoq.cn/article/39a4f31bfc8fff191a43fa59c

51 RabbitMQ / RocketMQ / Kafka_消息队列 rabbitmq kafka-CSDN博客https://blog.csdn.net/qzhqbb/article/details/162644190

52 分布式常见面试题:消息队列三选一,kafka,rocketmq,还是rabbitmq,到底应该怎么选 #程序员 #消息队列 #java #java面试https://www.iesdouyin.com/share/video/7593154694627084922

53 【架构实战】消息队列选型完全指南:Kafka、RocketMQ、RabbitMQ深度对比-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/2719285

54 消息中间件架构选型实战:从品类认知到Kafka和RocketMQ 深度对比_消息中间件专家-CSDN博客https://blog.csdn.net/qq_24597659/article/details/158428844

55 深入对比分析 RabbitMQ、RocketMQ 和 Kafka_rabbitmq rocketmq kafka区别-CSDN博客https://blog.csdn.net/tenifs/article/details/161568067

56 主流消息队列对比:Kafka vs RabbitMQ vs RocketMQ - 技术栈https://jishuzhan.net/article/2004711648829964290

57 RocketMQ源码阅读之NameServer-CSDN博客https://blog.csdn.net/m0_52254276/article/details/118151890

58 RocketMQ之NameServer详解 原创https://blog.csdn.net/Soldier_son/article/details/115053711

59 源码深入篇:RocketMQ 核心源码精读指南 - 佛祖让我来巡山 - 博客园https://www.cnblogs.com/sun-10387834/p/21303542

60 source-code-hunter/docs/rocketmq/rocketmq-nameserver-broker.md at main · linkeee/source-code-hunter · GitHubhttps://github.com/linkeee/source-code-hunter/blob/main/docs/rocketmq/rocketmq-nameserver-broker.md

61 路由中心NameServer深度源码解析本章主要介绍RocketMQ理由管理、服务注册及服务发现的机制,NameServ - 掘金https://juejin.cn/post/7086112241124114463

62 RocketMQ源码分析------NameServer启动流程与路由管理器-CSDN博客https://blog.csdn.net/weixin_43696529/article/details/121451247

63 【全网首发】MQ系列4:NameServer 原理解析https://heapdump.cn/article/4422626

64 初识RocketMQ | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/introduction/02whatis/

65 RocketMQ 存储底层深扒:CommitLog+ConsumeQueue 如何撑起千万级消息吞吐?_rocketmq commitlog-CSDN博客https://blog.csdn.net/jam_yin/article/details/155063776

66 RocketMQ架构与原理-CSDN博客https://blog.csdn.net/qq_32099833/article/details/120441757

67 RocketMQ高性能揭秘:承载万亿级流量的架构奥秘|得物技术_RocketMQ_得物技术_InfoQ写作社区https://xie.infoq.cn/article/39a4f31bfc8fff191a43fa59c

68 RocketMQ的消息存储结构_rocketmq 消息存储细节-CSDN博客https://blog.csdn.net/m0_72040795/article/details/162690827

69 终于弄明白了 RocketMQ 的存储模型https://heapdump.cn/article/5135166

70 RocketMQ基于CommitLog与ConsumeQueue的高并发消息读写性能优化原理-开发者社区-阿里云https://developer.aliyun.com/article/1659817

71 一文读懂 RocketMQ 工作流程:从消息发送到消费的全链路解析一文读懂 RocketMQ 工作流程:从消息发送到消费 - 掘金https://juejin.cn/post/7559073803939446826

72 基本最佳实践 | RocketMQhttps://rocketmq.apache.org/zh/docs/bestPractice/01bestpractice/

73 【RocketMQ全面解析】架构原理、消费类型、性能优化、环境搭建_rocketmq、kafka、oceanus、mysql、clickhouse怎么组架构-CSDN博客https://blog.csdn.net/weixin_44262492/article/details/153286259

74 RocketMQ监控与运维实战:从底层原理到生产落地全解析_gettotaltps-CSDN博客https://blog.csdn.net/jam_yin/article/details/155314690

75 火箭级消息引擎!RocketMQ核心优劣全景解析_mq引擎-CSDN博客https://blog.csdn.net/qq_44378083/article/details/149726842

76 RocketMQ 生产故障实录:system busy 背后是三层瓶颈的叠加 - Ai拆代码的曹操 - 博客园https://www.cnblogs.com/skills1024/p/21057399

77 RocketMQ 系列文章(高级篇第 2 篇):消息追踪与性能优化实战-CSDN博客https://blog.csdn.net/qq_29757467/article/details/159647149

78 RocketMQ 面试备战指南_rocketmq面试-CSDN博客https://songfayuan.blog.csdn.net/article/details/146485535

79 Apache RocketMQ 从配置到运维:一份超全实战指南(含性能调优+高可用部署)-51CTO.COMhttps://www.51cto.com/article/830452.html

80 RocketMQ 事务消息原理详解 & 源码解析_rocketmq事物消息实现原理-CSDN博客https://blog.csdn.net/jjhfen00/article/details/145425346

81 事务消息 | RocketMQhttps://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/

82 Apache RocketMQ开发者指南https://home08.oss-cn-hangzhou.aliyuncs.com/tmp/rocketMQ.pdf

83 RocketMQ事务消息源码解析_rocketmq 事务消息源码解析-CSDN博客https://blog.csdn.net/tianjindong0804/article/details/134748233

84 深入 RocketMQ 内核:事务消息------分布式事务的终极解法(四) - 佛祖让我来巡山 - 博客园https://www.cnblogs.com/sun-10387834/p/21303394

85 RocketMq事务消息原理-CSDN博客https://blog.csdn.net/qq_43284469/article/details/162046368

86 RocketMQ的事务半消息和本地事务表机制_rocketmq半消息-CSDN博客https://blog.csdn.net/weixin_50055999/article/details/153787608

87 Transaction Messagehttps://rocketmq.apache.org/docs/featureBehavior/04transactionmessage/

88 顺序消息发送 | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/producer/03message2/

89 RocketMQ 顺序消息实现原理详解_rocketmq如何实现消息的顺序消费-CSDN博客https://blog.csdn.net/forgetmiss/article/details/148092987

90 RocketMQ 源码分析 ------ Message 顺序发送与消费 | 芋道源码 ------ 纯源码解析博客https://static.grmc.iocoder.cn/RocketMQ/message-send-and-consume-orderly/

91 别再说"单队列单消费者"了 RocketMQ 顺序消息的底层逻辑,90% 的人都搞错了#java #java面试 #编程 #后端开发 #程序员https://www.iesdouyin.com/share/video/7670834548569017652

92 RocketMQ 怎么保证消息的顺序性? | 犬小哈教程https://www.quanxiaoha.com/java-interview/rocketmq-message-ordering-guarantee

93 如何保证MQ消息是有序的?_rocketmq的有序-CSDN博客https://blog.csdn.net/u014427391/article/details/162039614

94 Ordered Message Sendinghttps://rocketmq.apache.org/docs/4.x/producer/03message2/

95 RocketMQ - 再谈顺序消息_rocketmq 队列锁-CSDN博客https://blog.csdn.net/qq_43350524/article/details/146764894

96 运维管理https://github.com/apache/rocketmq/blob/main/docs/cn/operation.md

97 RocketMQ 系列文章(高级篇第 1 篇):高可用集群部署与运维监控实战指南_rocketmq 集群-CSDN博客https://blog.csdn.net/qq_29757467/article/details/159642253

98 阿里云专有云飞天企业版消息队列 MQ 运维指南(RocketMQ)产品版本:v3.18.0文档版本:20230414http://apsara-doc.oss-cn-hangzhou.aliyuncs.com/apsara-pdf/enterprise/v_3_18_0/ons/zh/rocketmq-apsarastack-operation-guide.pdf

99 Admin Tool | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool/

100 RocketMQ运维常用命令_rocketmq查看集群状态-CSDN博客https://blog.csdn.net/hu_go_/article/details/102736410

101 RocketMQ运维实战:用mqadmin命令排查线上消息堆积问题(附完整命令清单)-CSDN博客https://blog.csdn.net/weixin_42531886/article/details/160268857

102 RocketMQ运维管理命令mqadmin-运维管理_mqadmin resetoffsetbytime-CSDN博客https://blog.csdn.net/testbaibai/article/details/132079578

103 Admin Toolhttps://rocketmq.apache.org/docs/deploymentOperations/02admintool/

104 Admin Tool | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool/

105 运维管理https://github.com/apache/rocketmq/blob/main/docs/cn/operation.md

106 阿里云专有云飞天企业版消息队列 MQ 运维指南(RocketMQ)产品版本:v3.18.0文档版本:20230414http://apsara-doc.oss-cn-hangzhou.aliyuncs.com/apsara-pdf/enterprise/v_3_18_0/ons/zh/rocketmq-apsarastack-operation-guide.pdf

107 客户端配置 | RocketMQhttps://rocketmq.apache.org/zh/docs/4.x/parameterConfiguration/01local/

108 rocketmq安装,内存配置,各种命令说明,windows下安装,控制台工具_resetoffsetbytime-CSDN博客https://blog.csdn.net/tototuzuoquan/article/details/116718466

109 RocketMQ 双主双从集群 豆包总结版本_rocketmq 双主从-CSDN博客https://blog.csdn.net/weixin_60948956/article/details/161050860

110 RocketMQ常用命令使用示例及说明_rocketmq updatesubgroup-CSDN博客https://blog.csdn.net/x763795151/article/details/80385744

111 RocketMQ运维常用命令_rocketmq查看集群状态-CSDN博客https://blog.csdn.net/hu_go_/article/details/102736410

112 kafka,rocketmq,rabbitmq技术选型? #kafka #rocketmq #rabbitmq #Java面试 #Java八股文https://www.iesdouyin.com/share/video/7604460185238687003

113 主流MQ中间件功能与性能对比分析https://www.iesdouyin.com/share/video/7526545473491062042

114 分布式常见面试题:消息队列三选一,kafka,rocketmq,还是rabbitmq,到底应该怎么选 #程序员 #消息队列 #java #java面试https://www.iesdouyin.com/share/video/7593154694627084922

115 【架构实战】消息队列选型完全指南:Kafka、RocketMQ、RabbitMQ深度对比-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/2719285

116 RocketMQ、RabbitMQ、Kafka 全面对比与主流程深度剖析_kafka 对比-CSDN博客https://blog.csdn.net/weixin_39863120/article/details/148738918

117 消息中间件选型分析:RabbitMQ vs RocketMQ vs Kafka_kafka rabbitmq rocketmq选型-CSDN博客https://blog.csdn.net/weixin_43578751/article/details/150577750

118 对比RabbitMQ、Kafka与RocketMQ,我得出的高可用最佳选择_mob64ca13faa4e6的技术博客_51CTO博客https://blog.51cto.com/u_16213593/14700079

119 MQ三巨头RocketMQ、Kafka、RabbitMQ 该怎么选型?"简历上写用了 RocketMQ,面试官追着问为什 - 掘金https://juejin.cn/post/7567009647632941071

(注:文档部分内容可能由 AI 生成)

相关推荐
小园子的小菜3 天前
RocketMQ 核心原理、架构优势与核心机制全解
架构·rocketmq
晚安code10 天前
RocketMQ 顺序消费实战:批量接口加 Redis Pipeline同步数据
redis·rocketmq
晚安code11 天前
RocketMQ 延迟消息实战:延迟双删策略解决 Redis 缓存一致性
redis·rocketmq
风样滴男人哟12 天前
spark streaming消费rocketmq的几种方式
大数据·spark·rocketmq
IT界的老黄牛12 天前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
摇滚侠12 天前
《RocketMQ 官网》阅读笔记 RocketMQ 普通消息 延时消息 顺序消息 事务消息
笔记·rocketmq
阿里云云原生13 天前
RocketMQ 高可用创新论文入选 ACM FSE:无需复制业务数据,实现有状态服务秒级接管
rocketmq
重庆小透明13 天前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
阿里云云原生13 天前
RocketMQ-A2A 创新论文入选 ACM FSE,定义 AI Agent 可靠协作新范式
apache·rocketmq