RocketMQ 内容详解【三、源码篇(深度剖析与实现细节 · 机制扩展版)】
第三章 · 源码篇(深度剖析与实现细节 · 机制扩展版)
3.1 Broker 内部机制
3.1.1 启动与注册机制
Broker 启动时,首先加载配置文件,包括 Broker 名称、角色(Master / Slave)、存储路径、监听端口等,然后进行 NameServer 注册,以便 Producer 和 Consumer 能够通过 NameServer 查询 Topic 路由信息。
-
注册流程:
- Broker 启动 → 构造
BrokerController。 - 调用
registerBrokerAll()向 NameServer 注册 Broker 信息。 - NameServer 返回 Topic 路由信息缓存。
- Broker 启动 Netty 服务监听客户端请求(Producer/Consumer)。
- Broker 启动 → 构造
-
机制解析:
- NameServer 采用轻量级服务发现机制,无状态设计。
- Broker 注册信息包括:BrokerName、BrokerId、队列数量、Topic 列表等。
- 通过轮询或负载均衡策略,Producer 可以选择 Broker 进行消息发送。
3.1.2 消息存储机制
RocketMQ Broker 核心存储机制是 顺序写 + 逻辑索引,保障高吞吐和可靠性。
-
CommitLog(消息主体存储):
- 顺序追加写入文件,减少磁盘随机 I/O。
- 使用 MappedFile 内存映射 + AppendMessageCallback,实现零拷贝。
- 支持同步刷盘和异步刷盘两种模式。
-
ConsumeQueue(逻辑队列索引):
- 每个 Topic + Queue 对应一个 ConsumeQueue。
- 每条索引记录消息物理偏移、消息长度、tagCode。
- Consumer 拉取消息时通过 ConsumeQueue 快速定位 CommitLog。
-
IndexFile(Key 索引):
- 建立消息 Key 到物理偏移的倒排索引。
- 支持高效的按 Key 查询。
-
延迟队列 & 死信队列:
- 消费失败消息进入延迟队列,根据 delayLevel 定期重试。
- 超过最大重试次数的消息进入 DLQ,保证消费异常可追溯。
机制解析:
- 顺序写保证高吞吐。
- 逻辑索引解耦消息存储与消费,支持快速查找。
- 延迟队列和 DLQ 提供消息可靠性保障和补偿能力。
3.1.3 高可用机制
RocketMQ 提供三种高可用模式:
-
同步双写(SYNC_MASTER):
- Producer 发送消息,Master 和 Slave 都写入 CommitLog 才返回 ACK。
- 保障强一致性,但吞吐稍低。
-
异步复制(ASYNC_MASTER):
- Master 写入 CommitLog 后立即返回 ACK。
- Slave 异步复制消息,提高吞吐。
-
DLedger 分布式日志模式:
- 基于 Raft 协议,实现 Leader / Follower 多节点同步。
- 消息写入需超过多数节点 ack 才认为成功。
3.2 Producer 内部机制
3.2.1 消息发送机制
-
发送模式:
- 同步发送:等待 Broker ACK。
- 异步发送:回调通知结果。
- 单向发送:不等待 ACK,适合日志类消息。
-
负载均衡机制:
- Producer 根据路由信息选择 Broker 和队列。
- 默认轮询算法,也支持自定义策略。
3.2.2 路由刷新机制
- 路由信息缓存(TopicRouteTable)过期或发送失败时触发刷新。
- Producer 自动重新拉取 NameServer 信息,保证消息发送可达性。
- 支持 Broker 动态扩容和 Topic 动态增减队列。
3.3 Consumer 内部机制
3.3.1 Rebalance 机制
- 消费组内多个 Consumer 消费同一 Topic 的消息,需要均衡分配。
- 核心类:
RebalanceImpl。 - 支持多种队列分配策略(平均分配、环形分配等)。
3.3.2 消息拉取与长轮询
PullMessageService负责轮询拉取消息。- 支持 长轮询:Broker 阻塞等待消息到达,提高即时性。
- 消费端缓存已拉取消息在
ProcessQueue,按顺序或批量消费。
3.3.3 消费进度机制
-
消费成功后更新 offset:
- Push 模式:异步提交到 Broker。
- Pull 模式:可配置存储策略(内存/本地/远程)。
-
支持顺序消费、批量消费与并发消费模式。
3.4 事务消息机制
- 半消息发送到 Broker,暂时不可见。
- Producer 执行本地事务后提交或回滚。
- Broker 定期扫描 HALF 消息,回查事务状态,保证最终一致性。
3.5 顺序消息机制
- Producer 根据业务 Key 计算 QueueId。
- Broker 保证顺序写入 CommitLog 与 ConsumeQueue。
- Consumer 对同一队列单线程消费,确保顺序。
3.6 重试与死信机制
- 消费失败消息进入延迟队列,按 delayLevel 分级重试。
- 超过最大重试次数进入 DLQ,便于人工处理或补偿。
✅ 本章扩展总结
- Broker:启动、存储、注册机制。
- Producer:发送、路由、负载均衡、事务消息。
- Consumer:Rebalance、长轮询、消费进度管理。
- 高可用机制:同步双写、异步复制、DLedger。
- 可靠性保障:顺序消费、重试、死信队列、事务消息。
本章融合文字描述与 Mermaid 图谱,提供从源码调用链到消息流转、线程模型、事务机制、顺序保证和高可用复制的 深度机制解析,适合高级开发者和架构师系统理解 RocketMQ 内部原理。
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120681

浙公网安备 33010602011771号