RocketMQ 是一款高性能、高吞吐量、低延遲的消息中間件。數(shù)年來(lái),RocketMQ 承載了阿里“雙十一”的大部分業(yè)務(wù),并憑借其優(yōu)秀性能得到了架構(gòu)師的青睞,成為互聯(lián)網(wǎng)行業(yè)首選的消息中間件。本書(shū)從使用場(chǎng)景入手,介紹如何使用RocketMQ,使用過(guò)程中會(huì)遇到什么問(wèn)題,如何解決這些問(wèn)題,以及為什么可以這樣解決。本書(shū)強(qiáng)調(diào)實(shí)戰(zhàn)與理論結(jié)合,將原理穿插在實(shí)戰(zhàn)中講解,旨在讓每一位RocketMQ初學(xué)者通過(guò)對(duì)本書(shū)的學(xué)習(xí),快速“升級(jí)打怪”,成為RocketMQ 領(lǐng)域的佼佼者。
1.凝聚兩位RocketMQ架構(gòu)師的多年實(shí)戰(zhàn)經(jīng)驗(yàn),從實(shí)踐出發(fā),結(jié)合實(shí)際應(yīng)用中的案例幫助讀者快速成長(zhǎng)、從理論走向?qū)崙?zhàn)。
2.本書(shū)對(duì)RocketMQ的原理與架構(gòu)進(jìn)行了深入淺出的講解,結(jié)構(gòu)清晰,內(nèi)容扎實(shí),滿(mǎn)足RocketMQ愛(ài)好者和從業(yè)人員的需求。
3.本書(shū)得到RocketMQ官方社區(qū)的支持。
(待更新)
丁威,《RocketMQ技術(shù)內(nèi)幕》聯(lián)合作者,熱衷于中間件領(lǐng)域的技術(shù)分享,維護(hù)“中間件興趣圈”公眾號(hào),榮獲RocketMQ官方社區(qū)優(yōu)秀布道師、CSDN2020博客執(zhí)之星Top2等榮譽(yù)稱(chēng)號(hào)。目前擔(dān)任中通快遞技術(shù)平臺(tái)部資深架構(gòu)師,主要負(fù)責(zé)全鏈路壓測(cè)、消息中間件、數(shù)據(jù)同步等產(chǎn)品的研發(fā)與落地,擁有千億級(jí)消息集群的運(yùn)維經(jīng)驗(yàn),不僅實(shí)踐經(jīng)驗(yàn)豐富,而且對(duì)其源代碼有深入且系統(tǒng)的研究。
梁勇,哈啰出行高級(jí)技術(shù)專(zhuān)家,負(fù)責(zé)服務(wù)框架和消息平臺(tái),參與了《RocketMQ技術(shù)內(nèi)幕》審稿工作。專(zhuān)注后端中間件方向,公眾號(hào)“瓜農(nóng)老梁”維護(hù)者。
第 1章 認(rèn)識(shí)Apache RocketMQ 1
1.1 RocketMQ 快速入門(mén) 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ù)語(yǔ) 7
1.2.1 消息相關(guān)術(shù)語(yǔ) 7
1.2.2 主題相關(guān)術(shù)語(yǔ) 8
1.2.3 消費(fèi)相關(guān)術(shù)語(yǔ) 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ā)讀寫(xiě) 11
1.3.4 高可用性與伸縮性 12
1.3.5 高可靠存儲(chǔ) 12
1.4 RocketMQ的典型使用場(chǎng)景 12
1.4.1 消息通道 12
1.4.2 削峰填谷 13
1.4.3 順序消費(fèi)場(chǎng)景 13
1.4.4 廣播消費(fèi)場(chǎng)景 13
1.4.5 事務(wù)消息場(chǎng)景 13
1.5 本章小結(jié) 13
第 2章 RocketMQ消息發(fā)送 14
2.1 詳解消息發(fā)送API 14
2.1.1 發(fā)送接口分類(lèi) 15
2.1.2 集群管理接口說(shuō)明 16
2.1.3 客戶(hù)端配置說(shuō)明 17
2.1.4 DefaultMQProducer 參數(shù)說(shuō)明 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 客戶(hù)端日志注意事項(xiàng) 24
2.3 消息發(fā)送的典型使用方式 25
2.3.1 發(fā)送示例詳解 25
2.3.2 發(fā)送隊(duì)列選擇 26
2.3.3 通過(guò)指定消息Key發(fā)送 28
2.3.4 通過(guò)指定消息tag 發(fā)送 29
2.3.5 消息msgId 詳解 30
2.4 消息發(fā)送的常見(jiàn)錯(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與版本的演變說(shuō)明 45
3.2.1 消息消費(fèi)類(lèi)圖 45
3.2.2 消息消費(fèi)API 簡(jiǎn)單使用示例 49
3.2.3 消息消費(fèi)API版本的演變說(shuō)明 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)組線(xiàn)程數(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)不均衡問(wèn)題 74
3.5 DefaultLitePullConsumer 核心參數(shù)與實(shí)戰(zhàn) 75
3.5.1 DefaultLitePullConsumer類(lèi)圖 75
3.5.2 DefaultLitePullConsumer簡(jiǎn)單使用示例 80
3.5.3 Lite PULL 與 PUSH模式的對(duì)比 80
3.5.4 長(zhǎng)輪詢(xún)實(shí)現(xiàn)原理 81
3.6 結(jié)合實(shí)際場(chǎng)景再聊DefaultLitePullConsumer 的使用 83
3.6.1 場(chǎng)景描述 83
3.6.2 PUSH 與PULL 模式選型 83
3.6.3 方案設(shè)計(jì) 83
3.6.4 代碼實(shí)現(xiàn)與代碼解讀 84
3.7 結(jié)合實(shí)際場(chǎng)景順序消費(fèi)、消息過(guò)濾實(shí)戰(zhàn) 91
3.7.1 順序消費(fèi) 91
3.7.2 消息過(guò)濾實(shí)戰(zhàn) 95
3.8 消息消費(fèi)積壓?jiǎn)栴}的排查實(shí)戰(zhàn) 97
3.8.1 問(wèn)題描述 97
3.8.2 問(wèn)題分析與解決方案 98
3.8.3 線(xiàn)程棧分析經(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 框架簡(jiǎn)介 105
4.2 使用案例 106
4.2.1 引入依賴(lài)包 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 路由注冊(cè)、剔除機(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ù)端線(xiàn)程模型 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)存映射與頁(yè)緩存 137
5.3.4 內(nèi)核級(jí)讀寫(xiě)分離 138
5.3.5 刷盤(pán)機(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 消息過(guò)濾 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 長(zhǎng)輪詢(xún)機(jī)制 165
5.5.4 消息軌跡 165
5.6 本章小結(jié) 168
第6章 RocketMQ 線(xiàn)上環(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ù)說(shuō)明 178
6.4.4 多副本結(jié)語(yǔ) 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 集群性能壓力測(cè)試 202
7.2.1 壓力測(cè)試腳本參數(shù)說(shuō)明 203
7.2.2 性能壓力測(cè)試實(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 查詢(xún)死信隊(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)控開(kāi)發(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)控開(kāi)發(fā)實(shí)戰(zhàn) 230
8.4 告警設(shè)計(jì)與實(shí)戰(zhàn) 242
8.4.1 告警項(xiàng)設(shè)計(jì) 242
8.4.2 告警開(kāi)發(fā)實(shí)戰(zhàn) 244
8.5 本章小結(jié) 248
第9章 RocketMQ 高并發(fā)編程技巧 249
9.1 讀寫(xiě)鎖使用場(chǎng)景 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 線(xiàn)程隔離機(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 客戶(hù)端消費(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