RocketMQ 是一款高性能、高吞吐量、低延遲的消息中間件。數(shù)年來,RocketMQ 承載了阿里“雙十一”的大部分業(yè)務(wù),并憑借其優(yōu)秀性能得到了架構(gòu)師的青睞,成為互聯(lián)網(wǎng)行業(yè)首選的消息中間件。本書從使用場景入手,介紹如何使用RocketMQ,使用過程中會(huì)遇到什么問題,如何解決這些問題,以及為什么可以這樣解決。本書強(qiáng)調(diào)實(shí)戰(zhàn)與理論結(jié)合,將原理穿插在實(shí)戰(zhàn)中講解,旨在讓每一位RocketMQ初學(xué)者通過對本書的學(xué)習(xí),快速“升級(jí)打怪”,成為RocketMQ 領(lǐng)域的佼佼者。
1.凝聚兩位RocketMQ架構(gòu)師的多年實(shí)戰(zhàn)經(jīng)驗(yàn),從實(shí)踐出發(fā),結(jié)合實(shí)際應(yīng)用中的案例幫助讀者快速成長、從理論走向?qū)崙?zhàn)。
2.本書對RocketMQ的原理與架構(gòu)進(jìn)行了深入淺出的講解,結(jié)構(gòu)清晰,內(nèi)容扎實(shí),滿足RocketMQ愛好者和從業(yè)人員的需求。
3.本書得到RocketMQ官方社區(qū)的支持。
(待更新)
丁威,《RocketMQ技術(shù)內(nèi)幕》聯(lián)合作者,熱衷于中間件領(lǐng)域的技術(shù)分享,維護(hù)“中間件興趣圈”公眾號(hào),榮獲RocketMQ官方社區(qū)優(yōu)秀布道師、CSDN2020博客執(zhí)之星Top2等榮譽(yù)稱號(hào)。目前擔(dān)任中通快遞技術(shù)平臺(tái)部資深架構(gòu)師,主要負(fù)責(zé)全鏈路壓測、消息中間件、數(shù)據(jù)同步等產(chǎn)品的研發(fā)與落地,擁有千億級(jí)消息集群的運(yùn)維經(jīng)驗(yàn),不僅實(shí)踐經(jīng)驗(yàn)豐富,而且對其源代碼有深入且系統(tǒng)的研究。
梁勇,哈啰出行高級(jí)技術(shù)專家,負(fù)責(zé)服務(wù)框架和消息平臺(tái),參與了《RocketMQ技術(shù)內(nèi)幕》審稿工作。專注后端中間件方向,公眾號(hào)“瓜農(nóng)老梁”維護(hù)者。
第 1章 認(rèn)識(shí)Apache RocketMQ 1
1.1 RocketMQ 快速入門 1
1.1.1 下載安裝包 1
1.1.2 啟動(dòng)服務(wù) 2
1.1.3 創(chuàng)建主題 3
1.1.4 創(chuàng)建消費(fèi)組 3
1.1.5 發(fā)送消息 4
1.1.6 消費(fèi)消息 4
1.1.7 調(diào)試RocketMQ 4
1.2 基本術(shù)語 7
1.2.1 消息相關(guān)術(shù)語 7
1.2.2 主題相關(guān)術(shù)語 8
1.2.3 消費(fèi)相關(guān)術(shù)語 9
1.3 RocketMQ 架構(gòu)設(shè)計(jì) 10
1.3.1 物理部署結(jié)構(gòu) 10
1.3.2 高吞吐量與低延遲的權(quán)衡 11
1.3.3 高并發(fā)讀寫 11
1.3.4 高可用性與伸縮性 12
1.3.5 高可靠存儲(chǔ) 12
1.4 RocketMQ的典型使用場景 12
1.4.1 消息通道 12
1.4.2 削峰填谷 13
1.4.3 順序消費(fèi)場景 13
1.4.4 廣播消費(fèi)場景 13
1.4.5 事務(wù)消息場景 13
1.5 本章小結(jié) 13
第 2章 RocketMQ消息發(fā)送 14
2.1 詳解消息發(fā)送API 14
2.1.1 發(fā)送接口分類 15
2.1.2 集群管理接口說明 16
2.1.3 客戶端配置說明 17
2.1.4 DefaultMQProducer 參數(shù)說明 18
2.2 重要參數(shù)與實(shí)戰(zhàn)建議 18
2.2.1 發(fā)送重試機(jī)制 18
2.2.2 延遲故障規(guī)避 19
2.2.3 ClientId的使用陷阱 20
2.2.4 客戶端日志注意事項(xiàng) 24
2.3 消息發(fā)送的典型使用方式 25
2.3.1 發(fā)送示例詳解 25
2.3.2 發(fā)送隊(duì)列選擇 26
2.3.3 通過指定消息Key發(fā)送 28
2.3.4 通過指定消息tag 發(fā)送 29
2.3.5 消息msgId 詳解 30
2.4 消息發(fā)送的常見錯(cuò)誤 31
2.4.1 找不到主題路由信息 31
2.4.2 消息發(fā)送超時(shí) 34
2.4.3 系統(tǒng)繁忙 36
2.5 本章小結(jié) 40
第3章 RocketMQ消息消費(fèi) 41
3.1 消息消費(fèi)概述 41
3.1.1 消費(fèi)隊(duì)列負(fù)載機(jī)制與重平衡 42
3.1.2 并發(fā)消費(fèi)模型 42
3.1.3 消費(fèi)進(jìn)度提交機(jī)制 43
3.2 消息消費(fèi)API與版本的演變說明 45
3.2.1 消息消費(fèi)類圖 45
3.2.2 消息消費(fèi)API 簡單使用示例 49
3.2.3 消息消費(fèi)API版本的演變說明 52
3.3 DefaultMQPushConsumer的核心參數(shù)與工作原理 53
3.3.1 DefaultMQPushConsumer核心參數(shù)與工作原理 53
3.3.2 消息消費(fèi)隊(duì)列負(fù)載算法 55
3.3.3 PUSH 模型的消息拉取機(jī)制 58
3.3.4 消息消費(fèi)進(jìn)度提交 59
3.4 DefaultMQPushConsumer使用示例與注意事項(xiàng) 60
3.4.1 ConsumeFromWhere的注意事項(xiàng) 60
3.4.2 基于多機(jī)房的隊(duì)列負(fù)載算法 62
3.4.3 消費(fèi)組線程數(shù)設(shè)置注意事項(xiàng) 66
3.4.4 批量消費(fèi)注意事項(xiàng) 67
3.4.5 訂閱關(guān)系不一致導(dǎo)致消息丟失 70
3.4.6 消費(fèi)者ClientId 不唯一導(dǎo)致不消費(fèi) 72
3.4.7 消費(fèi)重試次數(shù)設(shè)置 73
3.4.8 分區(qū)消費(fèi)不均衡問題 74
3.5 DefaultLitePullConsumer 核心參數(shù)與實(shí)戰(zhàn) 75
3.5.1 DefaultLitePullConsumer類圖 75
3.5.2 DefaultLitePullConsumer簡單使用示例 80
3.5.3 Lite PULL 與 PUSH模式的對比 80
3.5.4 長輪詢實(shí)現(xiàn)原理 81
3.6 結(jié)合實(shí)際場景再聊DefaultLitePullConsumer 的使用 83
3.6.1 場景描述 83
3.6.2 PUSH 與PULL 模式選型 83
3.6.3 方案設(shè)計(jì) 83
3.6.4 代碼實(shí)現(xiàn)與代碼解讀 84
3.7 結(jié)合實(shí)際場景順序消費(fèi)、消息過濾實(shí)戰(zhàn) 91
3.7.1 順序消費(fèi) 91
3.7.2 消息過濾實(shí)戰(zhàn) 95
3.8 消息消費(fèi)積壓問題的排查實(shí)戰(zhàn) 97
3.8.1 問題描述 97
3.8.2 問題分析與解決方案 98
3.8.3 線程棧分析經(jīng)驗(yàn) 101
3.8.4 RocketMQ 消費(fèi)端的限流機(jī)制 101
3.8.5 RocketMQ 服務(wù)端性能自查技巧 103
3.9 本章小結(jié) 104
第4章 rocketmq-spring 框架 105
4.1 rocketmq-spring 框架簡介 105
4.2 使用案例 106
4.2.1 引入依賴包 106
4.2.2 如何使用消息發(fā)送 107
4.2.3 消息消費(fèi)使用示例 112
4.3 本章小結(jié) 114
第5章 RocketMQ的設(shè)計(jì)原理 115
5.1 Name Server的設(shè)計(jì)理念 115
5.1.1 路由注冊、剔除機(jī)制 115
5.1.2 Name Server 設(shè)計(jì)的“缺陷” 117
5.2 消息發(fā)送 120
5.2.1 消息發(fā)送高可用機(jī)制 120
5.2.2 同步復(fù)制 122
5.2.3 事務(wù)消息 124
5.2.4 服務(wù)端線程模型 126
5.2.5 服務(wù)端快速失敗機(jī)制 127
5.3 消息存儲(chǔ) 128
5.3.1 存儲(chǔ)文件布局 128
5.3.2 順序?qū)? 137
5.3.3 內(nèi)存映射與頁緩存 137
5.3.4 內(nèi)核級(jí)讀寫分離 138
5.3.5 刷盤機(jī)制 140
5.3.6 文件恢復(fù) 143
5.3.7 零拷貝 147
5.4 消息消費(fèi) 147
5.4.1 并發(fā)消費(fèi)拉取模型 147
5.4.2 消費(fèi)進(jìn)度管理機(jī)制 150
5.4.3 消息過濾 151
5.4.4 順序消費(fèi) 152
5.4.5 延遲消息 153
5.4.6 消費(fèi)端限流機(jī)制 154
5.4.7 服務(wù)端限流機(jī)制 155
5.5 集群 156
5.5.1 主從同步 157
5.5.2 主從切換 159
5.5.3 長輪詢機(jī)制 165
5.5.4 消息軌跡 165
5.6 本章小結(jié) 168
第6章 RocketMQ 線上環(huán)境部署 169
6.1 集群資源規(guī)劃 169
6.1.1 硬件資源選擇 169
6.1.2 集群架構(gòu)選擇 170
6.2 Name Server 集群搭建 171
6.2.1 啟動(dòng)與關(guān)閉 171
6.2.2 堆內(nèi)存自定義 172
6.2.3 生產(chǎn)環(huán)境建議 172
6.3 Master-Slave主從架構(gòu)集群搭建 172
6.3.1 Master 節(jié)點(diǎn)修改配置 172
6.3.2 Slave 節(jié)點(diǎn)修改配置 174
6.3.3 調(diào)整日志路徑 175
6.3.4 JVM 內(nèi)存分配 175
6.3.5 節(jié)點(diǎn)啟動(dòng)與關(guān)閉 175
6.4 搭建多副本集群 176
6.4.1 多副本集群搭建 176
6.4.2 重新選主 178
6.4.3 參數(shù)說明 178
6.4.4 多副本結(jié)語 178
6.5 RocketMQ-Console 安裝 179
6.6 參數(shù)調(diào)優(yōu) 180
6.6.1 Broker 參數(shù)調(diào)優(yōu) 180
6.6.2 系統(tǒng)參數(shù)調(diào)優(yōu) 181
6.7 本章小結(jié) 183
第7章 RocketMQ 運(yùn)維實(shí)戰(zhàn) 184
7.1 運(yùn)維命令匯總 184
7.1.1 集群命令匯總 184
7.1.2 主題命令匯總 186
7.1.3 消費(fèi)組命令匯總 189
7.1.4 Broker 命令匯總 192
7.1.5 消息命令匯總 198
7.2 集群性能壓力測試 202
7.2.1 壓力測試腳本參數(shù)說明 203
7.2.2 性能壓力測試實(shí)戰(zhàn)記錄 203
7.3 集群平滑升級(jí)與擴(kuò)縮容 214
7.3.1 優(yōu)雅摘除節(jié)點(diǎn) 214
7.3.2 平滑擴(kuò)縮容 215
7.3.3 注意事項(xiàng) 217
7.4 查詢死信隊(duì)列消息內(nèi)容 218
7.5 本章小結(jié) 220
第8章 RocketMQ 監(jiān)控與治理 221
8.1 監(jiān)控設(shè)計(jì)理念 221
8.2 集群核心監(jiān)控項(xiàng) 222
8.2.1 監(jiān)控項(xiàng)設(shè)計(jì) 222
8.2.2 監(jiān)控開發(fā)實(shí)戰(zhàn) 224
8.3 主題消費(fèi)組核心監(jiān)控項(xiàng) 228
8.3.1 監(jiān)控項(xiàng)設(shè)計(jì) 229
8.3.2 監(jiān)控開發(fā)實(shí)戰(zhàn) 230
8.4 告警設(shè)計(jì)與實(shí)戰(zhàn) 242
8.4.1 告警項(xiàng)設(shè)計(jì) 242
8.4.2 告警開發(fā)實(shí)戰(zhàn) 244
8.5 本章小結(jié) 248
第9章 RocketMQ 高并發(fā)編程技巧 249
9.1 讀寫鎖使用場景 249
9.2 信號(hào)量使用技巧 251
9.3 同步轉(zhuǎn)異步編程技巧 254
9.4 CompletableFuture 使用技巧 255
9.5 Netty網(wǎng)絡(luò)編程 258
9.5.1 Netty網(wǎng)絡(luò)編程要點(diǎn) 262
9.5.2 線程隔離機(jī)制 271
9.6 本章小結(jié) 272
第 10章 消息方案案例 273
10.1 消息流量隔離方案 273
10.2 任意時(shí)間消息延遲方案 275
10.3 消息資源容災(zāi)遷移方案 277
10.3.1 集群同城跨可用區(qū)部署 277
10.3.2 資源遷移設(shè)計(jì) 278
10.4 跨集群復(fù)制方案設(shè)計(jì) 279
10.5 本章小結(jié) 280
第 11章 生產(chǎn)環(huán)境故障回顧 281
11.1 集群節(jié)點(diǎn)進(jìn)程神秘消失 281
11.1.1 現(xiàn)象描述 281
11.1.2 原因分析 281
11.1.3 解決方法 282
11.2 節(jié)點(diǎn)CPU 突刺故障排查 282
11.2.1 現(xiàn)象描述 282
11.2.2 原因分析 295
11.2.3 解決辦法 285
11.3 集群頻繁抖動(dòng)與發(fā)送超時(shí) 285
11.3.1 現(xiàn)象描述 285
11.3.2 原因分析 287
11.3.3 解決辦法 288
11.4 客戶端消費(fèi)性能低 288
11.4.1 現(xiàn)象描述 288
11.4.2 原因分析 288
11.4.3 解決辦法 289
11.5 消費(fèi)隊(duì)列阻塞應(yīng)急處理 289
11.5.1 現(xiàn)象描述 289
11.5.2 原因分析 290
11.5.3 解決辦法 292
11.6 本章小結(jié) 293