RocketMQ 由浅入深详解
2026-06-30 12:01:07 0 举报AI智能生成
《RocketMQ 由浅入深详解》是一本专注于指导开发者全面理解和使用RocketMQ消息中间件的书籍。书中通过详细的理论讲解和实战演练,系统地介绍了RocketMQ的核心原理、架构设计、安装配置、消息生产与消费机制、主题和队列管理等关键技术点。此外,它还涵盖了RocketMQ在分布式系统中的应用实践、性能优化、故障诊断等高级主题。读者能够借此深入掌握如何利用RocketMQ构建可靠的消息服务,适用于初步接触消息队列至希望提升到高级应用水平的广大开发者,是学习和提升RocketMQ应用能力的重要参考资料。
RocketMQ
RocketMQ详解
消息中间件
模板推荐
作者其他创作
大纲/内容
RocketMQ 完整系统入门(Java 开发视角・由浅入深)
1. 核心定位与适用场景
一句话定位
RocketMQ 是阿里开源分布式消息中间件,<b>解决系统异步解耦、流量削峰、最终一致性事务消息、海量消息可靠投递</b>问题,专为高可靠金融级业务设计。
推荐业务场景
异步解耦:订单创建后异步发通知、积分、物流,主流程不用等待下游服务
流量削峰:秒杀、直播评论、订单高峰缓冲瞬时海量请求,避免数据库压垮
事务消息:支付扣款与订单状态同步,保证两边同时成功 / 同时失败
大数据投递:业务日志、用户行为数据同步数据仓库
绝对不推荐场景
强同步实时调用场景(接口需要立刻拿到返回结果,MQ 异步天然有延迟)
极小体量单机单体单体应用,无异步、削峰需求(每日消息几百条以内,引入 MQ 增加运维复杂度,直接本地调用即可)
严格要求毫秒级低延迟、百万级极速吞吐(同等硬件下 Kafka 性能更强,RocketMQ 优势在可靠性)
跨地域异地多中心极速同步(同步复制模式延迟高,不适合异地极速同步)
超复杂多维度动态路由分发(优先 RabbitMQ)
2. 整体架构图解文字版(单机 / 集群通用)
四大核心节点角色分层
<b>NameServer 注册中心</b>
轻量无状态,集群互不通信,仅负责存储 Broker、Topic 路由地址元数据,不存消息、不处理消息收发,类似微服务 Nacos 注册中心。
Broker 启动主动上报自身信息到所有 NameServer
生产者 / 消费者启动时从 NameServer 拉取 Topic 对应 Broker 地址
<b>Broker 消息存储核心服务</b>
核心存储角色,接收生产者消息、持久化磁盘、分发消息给消费者;
分为 Master 主节点、Slave 从节点,主写从读,主宕机可切换从节点接管
内部分层模块:接收生产者消息→持久化 CommitLog 消息文件→分发 ConsumeQueue 消费索引→对外提供消息拉取 / 推送
<b>Producer 消息生产者</b>
业务服务发送消息的客户端,先请求 NameServer 获取 Broker 地址,直连 Broker 发送消息
<b>Consumer 消息消费者</b>
业务服务消费消息客户端,分推模式 (PUSH)、拉模式 (PULL),从 Broker 拉取消息处理,处理完成提交消费位点 offset
完整消息流转流程
3. 本地快速部署教程(Windows+Mac+Docker 一键部署)
方式一:Docker 一键单机部署(Windows/Mac 通用,最简推荐)
方式二:原生压缩包单机部署(Windows/Mac)
极简双主集群 docker-compose.yml(复制保存直接启动)
最简集群部署(Docker 1 主 1 从)
高频启动报错 & 修复
4. SpringBoot 最小可运行 Demo
1. Maven 完整依赖 pom.xml
2. application.yml 完整配置
3. 生产者代码(同步 + 异步发送普通消息)
4. 消费者监听代码(监听 Topic自动消费)
5. 启动类与运行结果说明
5. 入门必懂核心基础概念(配业务案例,剔除高阶)
<b>Topic 主题</b>
概念:消息一级分类,一类业务消息统一放入同一个 Topic。
案例:订单消息统一 topic=shop_order_topic,支付消息shop_pay_topic,日志 log_topic,业务按 Topic 隔离
<b>Tag 消息标签</b>
概念:Topic 内部二级过滤标识,一个 Topic 下细分业务类型
案例:shop_order_topic下 tag=CREATE (下单)、tag=CANCEL (取消订单),消费者只监听 CREATE 标签,过滤取消订单消息。
<b>Queue 消息队列</b>
概念:Topic 底层分片存储单元,一个 Topic 默认 4 个队列,消息分散存入不同 Queue,提升并发读写。
案例:订单 Topic 默认的4 个队列,生产者轮询投递,4 个消费者可并行消费 4 个 Queue,提高订单处理速度。Topic4 个队列,2 台消费者实例,每台消费 2 个队列,并发处理消息
<b>Message 消息</b>
概念:最小传输单元,包含消息体、Tag标签、唯一标识MsgId、投递时间等属性。
案例:一条 Message 承载完整下单数据(用户 ID、订单号、金额、商品)。
<b>Producer Group 生产者分组</b>
概念:同一业务生产者集群统一分组名,用于事务消息回查、幂等校验、故障定位。
案例:订单服务多实例部署,所有下单服务实例统一分组 shop_order_producer_group。
<b>Consumer Group 消费者分组</b>
概念:一组处理相同业务的消费者集群,同一分组共享消费进度。<b>消费规则</b>:同一分组多个消费者,一条消息只会被其中一个消费;不同分组互相独立,全部消费全量消息。
案例:库存服务、短信服务分两个消费组,同一条订单,订单消息库存、短信都能收到。
<b>Offset 消费位点</b>
概念:Queue 内消息顺序编号,记录消费者在 Queue 中读到第几条消息的游标,消费成功后更新,Broker 持久化存储。
案例:订单队列offset=100 代表已经处理完前 100 条消息,重启后从 101 继续消费,不会漏消息
<b>NameServer 路由注册中心</b>
概念:保存 Broker 和 Topic 路由信息,生产者消费者只需要连 NameServer 就能找到 Broker
案例:类比 Nacos 注册中心,专门给 MQ 做服务发现
<b>Broker 消息服务器</b>
概念:负责接收、存储、分发消息的核心服务,消息持久化载体。
案例:所有订单消息全部持久化存在 Broker 磁盘,服务重启消息不丢失。
6. 入门高频踩坑清单(部署 + 代码 + 消费异常)
7. 入门自检习题(5 选择 + 2 实操,附标准答案)
RocketMQ 企业中阶落地实战(Java 业务架构师版)
前置前提:已掌握单机 Docker 部署、基础生产者 / 消费者 Demo;全文区分<b>开发调试配置</b>、<b>生产高可靠配置</b>,所有功能配套可直接运行 SpringBoot 代码,无冗余运维命令,聚焦大厂线上落地方案。
1. 底层核心三层存储数据模型(CommitLog / ConsumeQueue / IndexFile)
1.1 三层文件作用拆解(业务视角,跳过磁盘 IO 底层细节)
1.2 消息写入完整存储流程
开发 / 生产存储配置区分(yml 配置片段)
2. 全量核心业务功能模块(场景 + 开发 / 生产配置 + 完整 SpringBoot 代码)
开发 / 生产配置
2.1 同步消息
2.2 异步消息
2.3 单向消息 OneWay
2.4 顺序消息(全局顺序 / 分区顺序)
2.5 延迟消息
2.6 批量消息
2.7 消息过滤 Tag 过滤 / SQL 表达式过滤
2.8 集群消费(默认模式,生产主流)
2.9 广播消费
2.10 事务消息(分布式最终一致性核心)
3. 全套可靠性保障体系(消息不丢、不重复、最终一致落地方案)
3.1 生产端消息不丢失
同步刷盘 SYNC_FLUSH(金融支付必开);
发送失败重试 3 次,异步失败写入故障补偿表;
事务消息兜底回查机制;
禁止单向消息用于核心业务。
3.2 消费端消息不丢失
消费逻辑执行完成自动提交 Offset;
业务异常不捕获,RocketMQ 自动重试;
生产设置消费超时 30s,长任务拆分;
宕机未提交 Offset,重启后重新拉取未消费消息。
3.3 解决重复消费(幂等设计,线上强制落地)
MQ 天然无法避免重复投递(网络超时、Offset 提交失败),唯一方案:业务幂等。
方案 1:订单号 / 唯一消息 Key 做数据库唯一索引(推荐)
方案 2:Redis 记录已消费 MsgId,5 分钟过期
3.4 事务消息最终一致性完整流程
4. Broker 三种集群架构、容灾切换机制
4.1 双主集群(开发 / 测试环境专用)
架构:2 台 Master 无 Slave,互相注册 NameServer;
刷盘:默认异步刷盘;
优缺点:部署简单成本低,Master 宕机该 Topic 不可写,无数据备份;
适用:测试环境、非核心日志业务。
4.2 双主双从 异步刷盘(普通电商业务,生产主流)
架构:MasterA-SlaveA、MasterB-SlaveB;Master 负责读写,Slave 异步同步 CommitLog;
容灾:Master 宕机,Slave 自动切换可读(可消费,不可发送新消息);
优势:写入性能高,容灾能力中等;适用普通订单、通知业务。
4.3 双主双从 同步刷盘(支付 / 资金核心业务)
架构:主从同步复制消息,Master 写入成功且同步到 Slave 后才返回 ACK;
容灾:主节点宕机,从节点数据完全一致,故障切换无数据丢失;
劣势:写入性能下降 20%~30%;适用支付、财务、交易系统。
故障切换机制
NameServer 感知 Broker 下线(30s 心跳超时);
Producer 刷新路由,自动路由到存活 Master;
Consumer 检测主节点不可读,自动拉取 Slave 节点消息;
主节点恢复后,自动同步缺失消息,恢复读写。
5. 生产性能调优基础参数(推荐配置值,区分开发 / 生产)
6. 五大典型业务完整实战案例(可运行代码)
案例 1:系统异步解耦(下单拆分库存 / 短信 / 物流)
核心逻辑:下单服务只发消息,库存、短信、物流三个独立消费组并行处理,互不阻塞。
生产者发送:
三套独立消费者:
stock_consumer_group:扣减库存
sms_consumer_group:发送下单短信
logistics_consumer_group:生成物流单
案例 2:流量削峰(秒杀大流量缓冲)
秒杀接口不直接操作数据库,只发送延迟 / 普通消息,后端消费者限流分批处理,防止 DB 打满。
消费者内部限流:每秒处理 200 单,超出休眠排队。
案例 3:分布式事务(下单 + 扣库存原子操作)
复用 2.10 事务消息代码,解决跨数据库操作一致性,避免超卖、空订单。
案例 4:日志异步存储(埋点日志落 ES)
单向消息批量发送日志,不影响主业务;独立消费组异步写入 Elasticsearch。
案例 5:消息推送通知(站内信 / APP 推送广播)
广播消费模式,所有服务实例接收公告消息,调用推送服务给全量用户发通知。
7. RocketMQ / Kafka / RabbitMQ 横向选型对比
核心指标对比表
表格
维度
吞吐量
消息延迟
分布式事务
重试 / 死信
消息过滤
运维成本
适用业务
RocketMQ
百万级
毫秒级
原生完善支持
完善,内置死信队列
Tag/SQL 双支持
低,阿里生态友好
电商订单、支付、事务、削峰
Kafka
千万级(最优)
微秒级
无原生事务,需自研
无重试,无死信机制
仅客户端过滤,服务端无筛选
中,日志场景专用
日志采集、大数据流处理
RabbitMQ
十万级(最弱)
毫秒~几十毫秒
事务简陋,不支持分布式回查
死信需要手动配置交换机
交换机路由灵活
高,高并发稳定性差
小型系统、复杂路由通知
业务选型标准
电商、支付、分布式事务、削峰 → RocketMQ(首选)
海量日志、实时大数据同步、ETL → Kafka
小型内部系统、复杂动态路由、低并发通知 → RabbitMQ
8. 线上中阶高频故障完整解决方案
8.1 消息大量积压
现象:控制台堆积几十万消息,消费速度远低于生产速度
解决方案:
扩容消费者线程,增大 Queue 数量;
拆分 Topic,业务分流;
积压超阈值告警;
历史冷消息丢弃 / 迁移临时 Topic。
8.2 重复消费
根因:网络超时、Offset 提交失败、集群切换重推
根治方案:业务全局幂等(唯一索引 / 消息 Key Redis),见 3.3 代码。
8.3 消息丢失
生产丢失:关闭单向核心消息、开启同步刷盘、发送失败记录补偿表;
消费丢失:禁止消费中途手动提交 Offset,异常不捕获触发重试;
Broker 丢失:生产使用主从同步复制架构。
8.4 死信队列(DLQ)
消息重试 16 次全部失败自动转入 % DLQ%+ 消费组 Topic;
处理方案:单独死信消费者,记录异常消息到数据库,人工定时补偿修复。
8.5 消费超时重复投递
根因:消费逻辑执行过长超过 timeout 阈值;
修复:拆分长任务、增大生产环境 consume-timeout=30000、异步子任务处理耗时逻辑。
8.6 集群主从同步延迟
现象:主节点写入大量消息,Slave 同步滞后;
修复:调优主从同步线程、降低单批次发送大小、同步刷盘架构保证数据一致。
8.7 磁盘打满
根因:CommitLog 文件长期不清理、消息积压;
解决方案:配置文件自动过期删除、监控磁盘使用率告警、积压消息及时消费、分离存储 CommitLog 磁盘。
RocketMQ 4.9.5 源码深度剖析(Java 架构师版,仅 Java 源码,剔除 C++/ 运维脚本)
版本锁定:Apache RocketMQ 4.9.5,所有源码类路径、方法、逻辑与该版本完全对齐;受众前提:熟练使用 RocketMQ 业务 API、集群运维、故障排查,聚焦<b>客户端 + Broker Java 核心源码</b>,所有内容服务线上调优、疑难底层故障定位。
1. 整体源码模块分层(6 大 Java 核心模块)
源码根包:org.apache.rocketmq,仅划分 Java 运行核心模块,过滤 tools、监控脚本、shell 运维目录
1.1 namesrv(NameServer 路由注册中心模块)
核心职责:无状态路由存储、Broker 心跳路由管理、Topic 路由查询
核心类:
NamesrvController:NameServer 顶层调度控制器,启动入口
RouteInfoManager:全量路由数据内存管理器(Topic、Broker、集群信息内存容器)
DefaultRequestProcessor:处理 Broker/Producer/Consumer 所有网络请求(注册、注销、查询路由)
BrokerHousekeepingService:定时扫描失联 Broker,清理过期路由
1.2 store(Broker 存储核心模块,磁盘三层存储实现)
核心职责:CommitLog、ConsumeQueue、IndexFile 读写、刷盘、内存缓存、文件过期清理
核心子包分层:
commitlog:主消息文件写入、刷盘、内存 MappedFile 缓存
consumequeue:消费索引构建、读取
index:消息检索索引实现
ha:主从同步 HA 复制模块(主从数据同步核心)
schedule:延迟消息定时存储逻辑
顶层控制器:DefaultMessageStore,Broker 存储唯一入口
1.3 client(Producer/Consumer Java 客户端模块)
分为生产者、消费者两套独立逻辑,业务开发直接依赖的 API 底层实现
producer 子模块
DefaultMQProducerImpl:生产者底层实现,发送逻辑入口
SendMessageProcessor:发送请求封装、重试、异步回调管理
consumer 子模块
DefaultMQPushConsumerImpl:推模式消费者底层核心(线上 99% 使用)
RebalanceImpl:消费者重平衡 Rebalance 全量实现
PullAPIWrapper:底层拉取消息封装
ConsumeMessageService:多线程消费调度、消息重试、死信投递
1.4 remoting(NIO 网络通信底层模块,全链路通信底座)
所有客户端 ↔ NameServer ↔ Broker 的网络交互统一依赖该模块,自研 NIO,不依赖 Netty 以外第三方
核心类:
RemotingServer/RemotingClient:服务端 / 客户端通信抽象
NettyRemotingServer/NettyRemotingClient:Netty NIO 具体实现
RemotingCommand:统一网络数据包协议载体(请求 / 响应封装)
NettyEncoder/NettyDecoder:自定义二进制编解码器
ResponseFuture:异步请求回调容器,同步 / 异步请求统一管理
1.5 broker(Broker 业务调度模块,存储 + 通信粘合层)
衔接 remoting 网络请求与 store 存储,处理发送、拉取、事务、过滤请求
核心控制器:BrokerController Broker 启动顶层入口
核心处理器:
SendMessageProcessor:处理生产者发消息请求
PullMessageProcessor:处理消费者拉消息请求
EndTransactionProcessor:事务消息提交 / 回滚处理
ClientManageProcessor:客户端心跳、注册管理
1.6 transaction(事务消息专用模块)
半消息存储、事务状态回查、定时状态扫描兜底
核心类:
TransactionMessageService:事务消息调度服务
TransactionCheckListener:本地事务回查执行入口
TransactionalMessageUtil:半消息 Topic 读写工具
2. 两大核心流程逐行源码解析(4.9.5 关键片段 + 行注释)
主线 1:异步发送普通消息全链路源码解析
调用链路:业务 rocketMQTemplate.asyncSend → DefaultMQProducerImpl.sendAsync → Remoting 网络发送 → Broker SendMessageProcessor写入 CommitLog
片段 1:生产者底层异步发送入口 DefaultMQProducerImpl#sendAsync
片段 2:异步发送任务 SendTask#run 真实网络请求
片段 3:Broker 接收消息写入 SendMessageProcessor
主线 2:Push 消费者拉取消息全链路源码解析
Push 本质:客户端后台循环主动 Pull,封装推模式;链路:RebalanceImpl分配队列 → PullAPIWrapper发送拉取请求 → Broker PullMessageProcessor读取 ConsumeQueue/CommitLog → 本地消费线程执行业务
片段 1:Rebalance 分配队列,触发拉取任务 RebalanceImpl#rebalanceByTopic
片段 2:底层拉取消息请求 PullAPIWrapper#pullKernelImpl
片段 3:Broker 读取消息 PullMessageProcessor
片段 4:消费线程执行业务、提交 offset ConsumeMessageConcurrentlyService
3. Remoting NIO 网络通信底层源码原理(Java 纯 Netty 实现)
3.1 整体 NIO 模型
采用 Netty Reactor 单主多从模型:
Boss 线程:监听端口,处理 TCP 连接建立
Worker 线程:处理 IO 读写、编解码、请求分发
业务线程池:剥离耗时业务逻辑,不阻塞 IO 线程
3.2 统一通信协议 RemotingCommand
一条 TCP 数据包只由 RemotingCommand承载,固定结构:
4 字节总长度;2. 4 字节头部长度;3. Header 序列化数据;4. Body 二进制消息体
源码核心字段:
3.3 编解码源码核心逻辑 NettyEncoder
3.4 同步 / 异步 / 单向请求区分实现
<b>同步 invokeSync</b>:阻塞当前线程,创建 ResponseFuture存入本地 Map,等待 opaque 匹配响应,超时抛出异常;
<b>异步 invokeAsync</b>:传入回调,请求发送后直接释放线程,Netty 收到响应后通过 opaque 找到 Future 执行回调;
<b>单向 sendOneWay</b>:不创建 Future,不等待响应,无重试、无结果回调,极致低延迟。
3.5 心跳检测与连接复用
客户端定时 NettyRemotingClient#scanResponseTable清理超时连接;
Producer/Consumer 每 30s 发送心跳包到 Broker/NameServer;
服务端 BrokerHousekeepingService 120s 未收到心跳判定客户端离线,销毁连接。
4. 三层存储底层实现源码原理(store 模块)
4.1 MappedFile 内存页缓存基础
底层使用 Java NIO FileChannel.map() 内存映射,零拷贝读写磁盘文件:
CommitLog/ConsumeQueue/IndexFile 全部基于 MappedFile封装;
预分配固定大小文件,顺序追加写入,减少磁盘随机 IO;
内存缓冲区 TransientStorePool堆外内存池,减少 GC 停顿。
4.2 CommitLog 主消息存储
文件固定 1G,文件名 = 文件起始物理偏移;
写入流程:消息封装→写入 MappedFile 内存缓存→刷盘线程异步 / 同步落盘;
刷盘策略源码区分:
4.3 ConsumeQueue 消费索引
每条索引固定 20 字节结构:
8字节CommitLog物理offset + 4字节消息长度 + 8字节Tag哈希
不存储消息体,极致轻量化;
Broker 拉取消息时先读 CQ 索引,再定向读取 CommitLog,避免全量扫描大文件。
4.4 IndexFile 检索索引
哈希槽 + 链表结构,通过 msgId/messageKey 快速定位消息物理位置,用于控制台消息查询。
4.5 文件过期删除机制
后台定时线程 CleanCommitLogService执行清理逻辑:
遍历所有 CommitLog 文件,判断文件最后写入时间;
超过 fileReservedTime(默认 24h)标记可删除;
无任何 ConsumeQueue 引用该文件则删除磁盘文件;
正在被消费读取的文件禁止删除,防止空指针。
5. 集群核心机制源码底层实现
5.1 NameServer 路由注册机制
Broker 启动时循环向所有 NameServer 发送 REGISTER_BROKER请求;
RouteInfoManager内存存储:Broker 地址、Topic 绑定队列、主从标记;
Producer/Consumer 查询路由 GET_ROUTEINFO_BY_TOPIC,NameServer 直接返回内存数据(无磁盘 IO);
Broker 心跳超时 HousekeepingService 自动清理失效 Broker 路由。
5.2 Broker 主从同步 HA 模块
HA 核心类 HAService:
Slave 主动建立 TCP 连接到 Master;
Master 启动 HAConnection线程,实时将新写入 CommitLog 数据推送到 Slave;
同步复制模式:Master 等待 Slave 接收完成再返回发送成功;异步无需等待;
Master 宕机后 Slave 接收不到数据,消费者自动切换拉取 Slave 数据。
5.3 消息负载均衡(生产者)
生产者 selectOneMessageQueue两种策略:
普通消息:轮询分配 MessageQueue,均衡分发;
顺序消息:根据业务 hashKey 取模固定队列,保证同 key 消息有序。
5.4 消费者 Rebalance 重平衡完整底层
触发时机:消费者上下线、Topic 队列扩容、订阅变更
定时任务每 20s 执行一次 rebalance;
拉取当前集群全部消费者实例 ID;
分配算法平均拆分 MessageQueue;
新增队列创建循环 Pull 拉取任务;移除队列停止拉取、持久化 offset;
Rebalance 期间消费短暂抖动(线上消息堆积根源之一)。
6. 高可靠底层源码保障机制
6.1 生产者发送重试底层
sendKernelImpl内置循环重试,重试次数由 retry-times-when-send-failed控制:
网络异常、Broker 繁忙自动切换备用 Broker 地址重试;
同步消息阻塞重试,异步消息回调标记失败,业务可二次补偿。
6.2 ACK 与消费 Offset 提交
Push 消费者:消费成功更新本地 ProcessQueue 内存 offset,定时线程批量同步到 Broker;
消费异常不更新 offset,下次拉取重复消费;
广播消费 offset 存储在本地文件,集群消费 offset 持久化 Broker。
6.3 重试 Topic & 死信队列底层
消费异常消息发送到 %RETRY%消费组 重试 Topic;
重试消息 16 次后仍失败,自动转入死信 Topic %DLQ%消费组;
底层工具类 SendMessageBack统一处理重试投递,隔离失败消息不阻塞正常业务。
6.4 事务消息半消息 / 提交 / 回查源码
半消息存入内部 Topic RMQ_SYS_TRANS_HALF_TOPIC,对普通消费者不可见;
本地事务成功执行 END_TRANSACTION提交,半消息转为正常消息;失败则删除半消息;
定时扫描服务 TransactionCheckService扫描长期未确认半消息,回调业务 checkLocalTransaction回查本地事务状态兜底。
7. 线上性能瓶颈底层源码根源(故障根因定位)
7.1 消息大量堆积
Rebalance 频繁触发:消费者频繁上下线,队列分配中断,消费停滞;
消费线程数 < Topic 队列总数:单个线程串行处理多个队列,消费上限被锁死;
消费逻辑同步阻塞 DB/IO,单条消费耗时过长,拉取速度跟不上生产;
磁盘 IO 打满:同步刷盘 + 机械硬盘,CommitLog 写入阻塞。
7.2 消费延迟高
异步刷盘 + 主从同步延迟,Slave 数据滞后,消费者切到从节点读取旧数据;
ConsumeQueue 索引读取命中大量冷文件,磁盘随机 IO 飙升;
批量拉取 maxMsgNums 过小,频繁网络往返。
7.3 发送超时
NameServer 路由缓存未刷新,生产者持续连接宕机 Broker;
同步刷盘 + 磁盘 IO 瓶颈,Broker 写入 CommitLog 阻塞网络线程;
网络连接耗尽,Remoting 连接池无空闲通道。
7.4 磁盘 IO 打满
同步刷盘 SYNC_FLUSH 每次写入强制落盘,大量随机刷盘;
消息积压 CommitLog 持续膨胀,文件过多清理线程来不及回收;
TransientStorePool 堆外内存耗尽,频繁页缓存淘汰,触发大量磁盘读取。
7.5 Rebalance 抖动
消费者集群频繁扩容 / 缩容、服务频繁重启;
客户端心跳超时阈值过小,误判离线;
消费组内消费者实例数量频繁变化,每次重分配暂停消费。
8. RocketMQ 4.9.5 源码本地编译调试实操指南
8.1 源码拉取与编译
8.2 IDEA 调试启动配置
NameServer 启动类:org.apache.rocketmq.namesrv.NamesrvStartup
VM 参数:-Drocketmq.namesrv.config.file=conf/namesrv.conf
Broker 启动类:org.apache.rocketmq.broker.BrokerStartup
VM 参数:-c conf/broker.conf
客户端调试:引入本地编译后的 client 模块依赖,替换 maven 远程包。
8.3 核心链路断点清单(故障调试必打)
生产者发送链路断点
DefaultMQProducerImpl#sendAsync 发送入口
SendMessageProcessor#handleSendMessage Broker 接收消息
DefaultMessageStore#putMessage CommitLog 写入
消费者拉取 & 消费断点
RebalanceImpl#rebalanceByTopic 重平衡分配队列
PullMessageProcessor#getMessage Broker 读取消息
ConsumeMessageConcurrentlyService#consumeMessage 业务消费执行
SendMessageBack#sendMessageBack 重试消息投递
网络通信断点
NettyRemotingClient#invokeAsync 异步网络请求
NettyDecoder#decode 数据包解析
存储刷盘断点
CommitLog#flush 同步 / 异步刷盘逻辑
CleanCommitLogService#run 文件过期清理
事务消息断点
TransactionMessageService#putHalfMessage 写入半消息
TransactionCheckService#scanHalfMessage 事务回查扫描
Collect
Get Started
Collect
Get Started
Collect
Get Started
Collect
Get Started
评论
0 条评论
下一页