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