第 1章 认识Apache RocketMQ 1
1.1 RocketMQ 快速入门 1
1.1.1 下载安装包 1
1.1.2 启动服务 2
1.1.3 创建主题 3
1.1.4 创建消费组 3
1.1.5 发送消息 4
1.1.6 消费消息 4
1.1.7 调试RocketMQ 4
1.2 基本术语 7
1.2.1 消息相关术语 7
1.2.2 主题相关术语 8
1.2.3 消费相关术语 9
1.3 RocketMQ 架构设计 10
1.3.1 物理部署结构 10
1.3.2 高吞吐量与低延迟的权衡 11
1.3.3 高并发读写 11
1.3.4 高可用性与伸缩性 12
1.3.5 高可靠存储 12
1.4 RocketMQ的典型使用场景 12
1.4.1 消息通道 12
1.4.2 削峰填谷 13
1.4.3 顺序消费场景 13
1.4.4 广播消费场景 13
1.4.5 事务消息场景 13
1.5 本章小结 13
第 2章 RocketMQ消息发送 14
2.1 详解消息发送API 14
2.1.1 发送接口分类 15
2.1.2 集群管理接口说明 16
2.1.3 客户端配置说明 17
2.1.4 DefaultMQProducer 参数说明 18
2.2 重要参数与实战建议 18
2.2.1 发送重试机制 18
2.2.2 延迟故障规避 19
2.2.3 ClientId的使用陷阱 20
2.2.4 客户端日志注意事项 24
2.3 消息发送的典型使用方式 25
2.3.1 发送示例详解 25
2.3.2 发送队列选择 26
2.3.3 通过指定消息Key发送 28
2.3.4 通过指定消息tag 发送 29
2.3.5 消息msgId 详解 30
2.4 消息发送的常见错误 31
2.4.1 找不到主题路由信息 31
2.4.2 消息发送超时 34
2.4.3 系统繁忙 36
2.5 本章小结 40
第3章 RocketMQ消息消费 41
3.1 消息消费概述 41
3.1.1 消费队列负载机制与重平衡 42
3.1.2 并发消费模型 42
3.1.3 消费进度提交机制 43
3.2 消息消费API与版本的演变说明 45
3.2.1 消息消费类图 45
3.2.2 消息消费API 简单使用示例 49
3.2.3 消息消费API版本的演变说明 52
3.3 DefaultMQPushConsumer的核心参数与工作原理 53
3.3.1 DefaultMQPushConsumer核心参数与工作原理 53
3.3.2 消息消费队列负载算法 55
3.3.3 PUSH 模型的消息拉取机制 58
3.3.4 消息消费进度提交 59
3.4 DefaultMQPushConsumer使用示例与注意事项 60
3.4.1 ConsumeFromWhere的注意事项 60
3.4.2 基于多机房的队列负载算法 62
3.4.3 消费组线程数设置注意事项 66
3.4.4 批量消费注意事项 67
3.4.5 订阅关系不一致导致消息丢失 70
3.4.6 消费者ClientId 不导致不消费 72
3.4.7 消费重试次数设置 73
3.4.8 分区消费不均衡问题 74
3.5 DefaultLitePullConsumer 核心参数与实战 75
3.5.1 DefaultLitePullConsumer类图 75
3.5.2 DefaultLitePullConsumer简单使用示例 80
3.5.3 Lite PULL 与 PUSH模式的对比 80
3.5.4 长轮询实现原理 81
3.6 结合实际场景再聊DefaultLitePullConsumer 的使用 83
3.6.1 场景描述 83
3.6.2 PUSH 与PULL 模式选型 83
3.6.3 方案设计 83
3.6.4 代码实现与代码解读 84
3.7 结合实际场景顺序消费、消息过滤实战 91
3.7.1 顺序消费 91
3.7.2 消息过滤实战 95
3.8 消息消费积压问题的排查实战 97
3.8.1 问题描述 97
3.8.2 问题分析与解决方案 98
3.8.3 线程栈分析经验 101
3.8.4 RocketMQ 消费端的限流机制 101
3.8.5 RocketMQ 服务端性能自查技巧 103
3.9 本章小结 104
第4章 rocketmq-spring 框架 105
4.1 rocketmq-spring 框架简介 105
4.2 使用案例 106
4.2.1 引入依赖包 106
4.2.2 如何使用消息发送 107
4.2.3 消息消费使用示例 112
4.3 本章小结 114
第5章 RocketMQ的设计原理 115
5.1 Name Server的设计理念 115
5.1.1 路由注册、剔除机制 115
5.1.2 Name Server 设计的“缺陷” 117
5.2 消息发送 120
5.2.1 消息发送高可用机制 120
5.2.2 同步复制 122
5.2.3 事务消息 124
5.2.4 服务端线程模型 126
5.2.5 服务端快速失败机制 127
5.3 消息存储 128
5.3.1 存储文件布局 128
5.3.2 顺序写 137
5.3.3 内存映射与页缓存 137
5.3.4 内核级读写分离 138
5.3.5 刷盘机制 140
5.3.6 文件恢复 143
5.3.7 零拷贝 147
5.4 消息消费 147
5.4.1 并发消费拉取模型 147
5.4.2 消费进度管理机制 150
5.4.3 消息过滤 151
5.4.4 顺序消费 152
5.4.5 延迟消息 153
5.4.6 消费端限流机制 154
5.4.7 服务端限流机制 155
5.5 集群 156
5.5.1 主从同步 157
5.5.2 主从切换 159
5.5.3 长轮询机制 165
5.5.4 消息轨迹 165
5.6 本章小结 168
第6章 RocketMQ 线上环境部署 169
6.1 集群资源规划 169
6.1.1 硬件资源选择 169
6.1.2 集群架构选择 170
6.2 Name Server 集群搭建 171
6.2.1 启动与关闭 171
6.2.2 堆内存自定义 172
6.2.3 生产环境建议 172
6.3 Master-Slave主从架构集群搭建 172
6.3.1 Master 节点修改配置 172
6.3.2 Slave 节点修改配置 174
6.3.3 调整日志路径 175
6.3.4 JVM 内存分配 175
6.3.5 节点启动与关闭 175
6.4 搭建多副本集群 176
6.4.1 多副本集群搭建 176
6.4.2 重新选主 178
6.4.3 参数说明 178
6.4.4 多副本结语 178
6.5 RocketMQ-Console 安装 179
6.6 参数调优 180
6.6.1 Broker 参数调优 180
6.6.2 系统参数调优 181
6.7 本章小结 183
第7章 RocketMQ 运维实战 184
7.1 运维命令汇总 184
7.1.1 集群命令汇总 184
7.1.2 主题命令汇总 186
7.1.3 消费组命令汇总 189
7.1.4 Broker 命令汇总 192
7.1.5 消息命令汇总 198
7.2 集群性能压力测试 202
7.2.1 压力测试脚本参数说明 203
7.2.2 性能压力测试实战记录 203
7.3 集群平滑升级与扩缩容 214
7.3.1 优雅摘除节点 214
7.3.2 平滑扩缩容 215
7.3.3 注意事项 217
7.4 查询死信队列消息内容 218
7.5 本章小结 220
第8章 RocketMQ 监控与治理 221
8.1 监控设计理念 221
8.2 集群核心监控项 222
8.2.1 监控项设计 222
8.2.2 监控开发实战 224
8.3 主题消费组核心监控项 228
8.3.1 监控项设计 229
8.3.2 监控开发实战 230
8.4 告警设计与实战 242
8.4.1 告警项设计 242
8.4.2 告警开发实战 244
8.5 本章小结 248
第9章 RocketMQ 高并发编程技巧 249
9.1 读写锁使用场景 249
9.2 信号量使用技巧 251
9.3 同步转异步编程技巧 254
9.4 CompletableFuture 使用技巧 255
9.5 Netty网络编程 258
9.5.1 Netty网络编程要点 262
9.5.2 线程隔离机制 271
9.6 本章小结 272
第 10章 消息方案案例 273
10.1 消息流量隔离方案 273
10.2 任意时间消息延迟方案 275
10.3 消息资源容灾迁移方案 277
10.3.1 集群同城跨可用区部署 277
10.3.2 资源迁移设计 278
10.4 跨集群复制方案设计 279
10.5 本章小结 280
第 11章 生产环境故障回顾 281
11.1 集群节点进程神秘消失 281
11.1.1 现象描述 281
11.1.2 原因分析 281
11.1.3 解决方法 282
11.2 节点CPU 突刺故障排查 282
11.2.1 现象描述 282
11.2.2 原因分析 295
11.2.3 解决办法 285
11.3 集群频繁抖动与发送超时 285
11.3.1 现象描述 285
11.3.2 原因分析 287
11.3.3 解决办法 288
11.4 客户端消费性能低 288
11.4.1 现象描述 288
11.4.2 原因分析 288
11.4.3 解决办法 289
11.5 消费队列阻塞应急处理 289
11.5.1 现象描述 289
11.5.2 原因分析 290
11.5.3 解决办法 292
11.6 本章小结 293