主题
RocketMQ 学习路线
索引页。按「部署 → 消息类型 → 存储 → 可靠性 → 消费 → 运维 → 选型/AI」排列,每条标出这篇能带走的东西:命令、配置或判断依据。
版本基线:4.9(经典主从)、5.3(Proxy / Timer / Controller)、5.5(LiteTopic)。未标版本的
mqadmin命令在 4.9 与 5.x 通用。
1. 部署:先让集群跑起来
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 01-架构与核心概念 | NameServer、Broker、CommitLog/ConsumeQueue 各自负责什么 | 本地启动 namesrv + broker + proxy;mqadmin clusterList、mqadmin topicList;判据:同一 brokerName 下出现 brokerId 0/1 |
读完应能回答:Producer 为什么不直连 NameServer 发消息;NameServer 全挂后存量客户端为什么还能工作。
2. 消息类型:按语义选发送方式
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 02-消息类型与使用场景 | 普通 / 顺序 / 延迟 / 事务 / 批量各自保证什么、代价是什么 | 四类消息的最小发送代码;mqadmin topicStatus、consumerProgress 验证;4.x 18 级延迟与 5.x Timer 的分界 |
判据:业务要「同一订单有序」选顺序消息并接受队头阻塞;要「35 秒后执行」在 5.x 用 Timer,4.x 只能落到最近的预定义级别。
3. 存储:消息落在哪、为什么快
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 03-消息存储与持久化 | 统一 CommitLog + 20 字节 ConsumeQueue + 三层 offset | store/ 目录结构;mqadmin topicStatus、consumerProgress;flushDiskType、fileReservedTime、磁盘 75/85/90% 水位 |
判据:topicStatus 的 maxOffset 持续增长而 consumerProgress 的 diff 不降,是消费问题,不是存储问题。
4. 可靠性:副本与失败兜底
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 04-高可用与主从复制 | SYNC/ASYNC_MASTER 定 RPO,DLedger/Controller 定 RTO | 两节点主从配置;clusterList 观察;主备切换演练步骤 |
| 07-死信队列与消费重试 | 消费失败后的重试阶梯与 DLQ 收口 | 重试间隔表(总时长约 4h46m);topicStatus %RETRY%、%DLQ%;重投的正确做法 |
| 13-可靠事件投递:本地消息表与幂等 | 业务写入与消息发送怎么不中断,重复投递怎么收口 | 本地消息表的最小表结构与补偿任务;消费端幂等键设计 |
判据:RPO=0 需要同步复制或 DLedger 多数派;只配异步复制时,Master 宕机允许丢最后一段。
5. 消费:并行度的单位是 Queue
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 05-消费者模型与负载均衡 | 长轮询、20s Rebalance、四种分配策略的真实影响面 | 8 Queue / 3 Consumer 的分配观察;mqadmin consumerProgress;Queue 数与 Consumer 数的配比 |
判据:Consumer 数超过 Queue 数,多出的实例不消费;Averagely 下任何成员变动都会触发全组重算。
6. 运维:出事时按现象查
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 08-生产故障场景处置 | 积压 / 丢失 / 重复 / 卡住四类 SOP | consumerProgress、topicStatus、queryMsgByKey、resetOffsetByTime 的正确用法与风险 |
| 09-多活与容灾架构 | 复制 + 切流 + 校验,而不是「双写」 | 同城/异地/单元化取舍;切换与回滚清单 |
| 10-流控过滤与ACL | 过滤、三层流控、消息轨迹、ACL 四件事分开 | plain_acl.yml 最小配置;traceTopicEnable;订阅表达式 |
| 12-监控指标与告警 | 写路径、分发、线程池、堆积、DLQ、主从的先兆与处置顺序 | getBrokerRuntimeInfo 看 putLatency99、dispatchBehindBytes、pageCacheLockTimeMills;consumerProgress 看 diff;exporter 默认 5557 |
判据:积压先看 consumerProgress 的 diff 与消费 TPS,再决定扩 Consumer 还是扩 Queue;resetOffsetByTime 只重置原 Topic 位点,不处理 DLQ。
7. 选型与 AI 场景
| 篇目 | 解决的问题 | 产物 |
|---|---|---|
| 06-Kafka-vs-RocketMQ | 存储模型、副本、Topic 规模、延迟/事务/顺序、运维成本 | 按版本标注的对比表与决策顺序 |
| 11-LiteTopic与AI会话 | 会话级通道如何支撑 RAG / Agent / 推理削峰 | enableLmq 等 broker 配置;LITE 父 Topic 创建命令;gRPC 客户端设置 LiteTopic |
判据:万级 Topic、需要延迟/事务/过滤,优先 RocketMQ 5.x;单 Topic 超大吞吐、流式生态,优先 Kafka。AI 会话用 LiteTopic,业务主链路仍用普通 Topic。
版本分界(避免把 4.x 结论套到 5.x)
| 能力 | 4.9 | 5.x |
|---|---|---|
| 延迟消息 | 18 个固定级别 | Timer 时间轮,任意时间(timerMaxDelaySec 默认 86400s) |
| 主备切换 | 默认手工;可开 DLedger(4.5+) | Controller 自动选主 |
| 协议 | Remoting | Remoting + gRPC(Proxy) |
| 会话通道 | 无 | 5.5 LiteTopic |
生产检查清单
上线前、运行中、故障时逐条核对:99-生产检查清单。