本書以Apache RocketMQ 4.9.5(編寫本書時最新的4.x版本)為基礎,從Apache RocketMQ 的實際使用、原理剖析,大規(guī)模消息集群下企業(yè)級落地的實踐以及所面臨的挑戰(zhàn),逐一由淺入深地進行講解。
全書分3篇,共16章;A篇包含第1~4章,主要講解Apache RocketMQ 入門以及如何掌握Apache RocketMQ 的基礎使用。原理篇包含第5~12章,主要講解了消費原理、負載均衡原理、順序消息原理等核心的RocketMQ部分。進階篇包含第13~16章,主要講解消息冪等、雙活設計等進階為架構(gòu)師必須掌握的內(nèi)容。講解過程中拋棄了傳統(tǒng)的源碼解析這種較枯燥的手段,而是更多地利用以下方式幫助讀者更快、更輕松地接受Apache RocketMQ的原理:通過近百張原創(chuàng)的手繪圖,形象地描述Apache RocketMQ 的運作過程、原理;通過與Kafka、RabbitMQ等成熟的消息中間件產(chǎn)品做對比的方式,有助于讀者對相關(guān)知識觸類旁通,舉一反三;每章都有思考題,以便于讀者總結(jié)思考所學內(nèi)容,進行靈活運用。隨書附贈示意代碼,獲取方式見封底。
本書適合對Apache RocketMQ感興趣的讀者閱讀。本書的內(nèi)容能幫助讀者快速地從入門到精通,并借助書中所總結(jié)的實踐經(jīng)驗,在工作中更好地設計出高并發(fā)、高可用的后臺系統(tǒng),支撐互聯(lián)網(wǎng)業(yè)務的高速發(fā)展。
本書告別枯燥的源碼解讀,以生動的案例、上百張手繪圖逐層揭秘RocketMQ的原理,真正意義上做到了深入淺出;如果只推薦一本書去學習RocketMQ,本書將是最合適的一本。10年大廠實戰(zhàn)經(jīng)驗沉淀、業(yè)內(nèi)大咖傾情推薦
隨著移動互聯(lián)網(wǎng)的充分發(fā)展,各種新技術(shù)層出不窮,只有優(yōu)秀的技術(shù)才能經(jīng)得起行業(yè)的考驗。而消息中間件是后臺技術(shù)棧中繞不開的一個技術(shù)組件,其是應對海量用戶、高并發(fā)、高可靠的架構(gòu)挑戰(zhàn)的超級利器。Apache RocketMQ正是這樣一款足夠優(yōu)秀的消息中間件產(chǎn)品。Apache RocketMQ 脫胎于阿里巴巴的雙十一,經(jīng)過多年雙十一洪峰流量的考驗,其性能、穩(wěn)定性已經(jīng)得到證明,而后廣泛應用于多個大型的互聯(lián)網(wǎng)公司,如滴滴、微眾銀行等,已經(jīng)成為國內(nèi)最優(yōu)秀、最受歡迎的消息中間件之一。
經(jīng)過多年的發(fā)展,介紹RocketMQ的書籍、文章已不少。讀者可以借助這些優(yōu)秀的書籍、文章去學習RocketMQ的使用,去了解源碼的實現(xiàn)。然而一些書籍或者博客文章大多基于源碼解讀的方式展開,這種方式對于深入學習確實很有益處,但是學習難度較大且較為枯燥,使初學者產(chǎn)生畏難情緒。
筆者于 2016年因公司項目需要,開始學習并使用Apache RocketMQ,之后有幸認識了社區(qū)中多位優(yōu)秀的貢獻者,從而也成為Apache RocketMQ的貢獻者之一。之后在知乎、博客等平臺撰寫了多篇介紹RocketMQ原理的文章,因文章的風格深入淺出、圖文并茂,得到Apache RocketMQ作者的贊賞。本著希望優(yōu)秀的Apache RocketMQ的原理能被更多人認識與學習,遂產(chǎn)生了系統(tǒng)地撰寫一本介紹Apache RocketMQ原理的書籍的想法。之后有幸結(jié)識到機械工業(yè)出版社的編輯,在他們的幫助和鼓勵下,歷時兩年完成了本書的撰寫。
本書的宗旨是讓讀者能輕松掌握Apache RocketMQ的原理、最佳實踐,所以放棄了貼源碼、貼示意代碼的傳統(tǒng)方式。而是大量采取圖表說明的方式進行展開。希望通過這種方式能幫助讀者利用地鐵上、睡覺前等碎片時間輕松理解Apache RocketMQ的原理并掌握其優(yōu)秀的實踐。
同時,本書的結(jié)構(gòu)采取由淺入深的方式。全書分基礎篇、原理篇、進階篇;A篇講解Apache RocketMQ 的基礎使用及一些最佳實踐的總結(jié)。原理篇按模塊點深入講解Apache RocketMQ的核心設計,是Apache RocketMQ 設計中最精華的部分,通過此部分的學習,讀者將深入掌握別人需要閱讀源碼才能掌握的優(yōu)秀設計。進階篇則是筆者在多年大型互聯(lián)網(wǎng)項目的實踐中遇到的一些高級話題、難題,能幫助不少開發(fā)人員成為優(yōu)秀架構(gòu)師。
Apache RocketMQ進階之路在內(nèi)容上,本書采取類比講解的方式去展開一些知識點。例如講解順序消息的章節(jié)同時也會介紹Kafka 的實現(xiàn)、在講解事務消息的章節(jié)也會介紹分布式事務的通用解決方案,通過這種方式很容易引導讀者思考和聯(lián)想,使得知識的掌握更為輕松。
類似課堂的學習一樣,每一章的結(jié)束都會留一道或數(shù)道思考題,以便進一步加深對知識的掌握與理解。
希望學習Apache RocketMQ的人員。
已經(jīng)有Apache RocketMQ的使用經(jīng)驗,希望能進一步了解其原理、掌握最佳實踐的人員。
從事消息中間件或者分布式系統(tǒng)研發(fā)的開發(fā)人員。
企業(yè)消息中間件的維護、運維人員。
Apache RocketMQ 社區(qū)貢獻者。
本書內(nèi)容雖然已深入到Apache RocketMQ的核心原理部分,但是內(nèi)容的展開會采取循序漸進的方式進行。本書分三大部分。
第1部分是基礎篇,包含第 1~4 章,主要講解Apache RocketMQ入門及其基礎使用。
第2部分是原理篇,包含第 5 ~12 章,主要講解如消費原理、負載均衡原理、順序消息原理等核心的RocketMQ部分。
第3部分是進階篇,包含第 13~16 章,主要講解如消息冪等、雙活設計等進階為架構(gòu)師必須掌握的內(nèi)容。
對于大部分讀者,均可以按順序閱讀本書。而對于對RocketMQ已經(jīng)有一定了解的研發(fā)人員,可以跳過基礎篇的部分從原理篇開始閱讀。同時,讀者也可以對感興趣的話題在進階篇及原理篇中尋找對應的章節(jié)進行閱讀。
由于筆者水平有限,編撰倉促,書中難免會出現(xiàn)錯誤,懇請讀者的批評、指正。若您有更多寶貴的建議或者意見,也歡迎發(fā)送郵件到linjunjie@apache.org。筆者期待和您交流更多關(guān)于Apache RocketMQ、消息中間件、系統(tǒng)設計的話題。
首先感謝這些年來筆者公司的同事及領(lǐng)導。通過和他們的交流以及給予的指導,筆者才能有幸深入地了解Apache RocketMQ中優(yōu)秀的設計原理,同時有機會參與到高并發(fā)、高可用的項目設計中。
其次感謝Apache RocketMQ社區(qū)的維護者,正因為他們的努力,一款如此優(yōu)秀的開源軟件才能讓更多的人了解、使用。
最后,筆者要誠摯感謝機械工業(yè)出版社的編輯及其他工作人員,有了大家的幕后努力及默默貢獻,本書才得以順利出版。
Apache RocketMQ Committer、架構(gòu)師。從2017年起開始參與RocketMQ社區(qū)的工作。曾任職甲骨文、OPPO,現(xiàn)為某頭部上市公司后臺架構(gòu)師,擁有11年中間件產(chǎn)品和大型業(yè)務后臺的雙背景研發(fā)經(jīng)歷。對海量用戶、高并發(fā)、多地域容災等架構(gòu)設計擁有豐富經(jīng)驗,熱衷于技術(shù)總結(jié)與知識分享。
基礎篇
第1章 Apache RocketMQ 綜述/
1.1為什么高并發(fā)系統(tǒng)都繞不開消息中間件/
1.1.1初識互聯(lián)網(wǎng)的架構(gòu)/
1.1.2大型互聯(lián)網(wǎng)系統(tǒng)遇到的共性挑戰(zhàn)/
1.1.3為什么要選擇 Apache RocketMQ/
1.2了解 Apache RocketMQ/
1.2.1RocketMQ簡介/
1.2.2RocketMQ發(fā)展史/
1.2.3RocketMQ在雙十一的表現(xiàn)/
1.3RocketMQ 核心概念與特性/
1.3.1RocketMQ組件/
1.3.2術(shù)語/
1.3.3RocketMQ重要特性/
1.4RocketMQ初體驗/
1.4.1安裝RocketMQ/
1.4.2啟動Name Server/
1.4.3啟動Broker/
1.4.4關(guān)閉Broker和Name Server/
1.4.5驗證收發(fā)消息/
1.5本章小結(jié)/
1.6思考題/
第2章 RocketMQ 消息生產(chǎn)/
2.1生產(chǎn)者概述/
2.1.1生產(chǎn)者實例/
2.1.2生產(chǎn)者組/
2.2認識RocketMQ消息/
2.2.1消息結(jié)構(gòu)/
2.2.2消息類型/
2.3消息發(fā)送實戰(zhàn)/
2.3.1發(fā)送普通消息/
2.3.2發(fā)送批量消息/
2.3.3發(fā)送順序消息/
2.3.4發(fā)送延時消息/
2.3.5發(fā)送事務消息/
2.4消息的三種發(fā)送模型/
2.4.1發(fā)送同步消息/
2.4.2發(fā)送異步消息/
2.4.3發(fā)送單向消息/
2.5生產(chǎn)者最佳實踐/
2.5.1不同消息類型的選擇/
2.5.2不同消息發(fā)送模型的選擇/
2.5.3發(fā)送消息的實戰(zhàn)建議/
2.6本章小結(jié)/
2.7思考題/
第3章 RocketMQ消息消費/
3.1消費者概述/
3.1.1消費者實例/
3.1.2消費者組/
3.2初探消費流程/
3.2.1消息存儲與消息隊列的關(guān)系/
3.2.2消息消費與消息隊列的關(guān)系/
3.3消費實戰(zhàn)/
3.3.1Push并發(fā)消費/
3.3.2Push順序消費/
3.3.3Pull Subscribe消費/
3.3.4Pull Assign消費/
3.3.5集群模式與廣播模式/
3.3.6標簽過濾 /
3.3.7SQL92過濾 /
3.3.8消息重試和死信隊列/
3.4消息消費最佳實踐/
3.4.1消費日志/
3.4.2消費冪等/
3.4.3提高消費并行度/
3.4.4批量消費方式/
3.4.5大量堆積時跳過歷史消息/
3.4.6規(guī)范消費者組名/
3.4.7訂閱關(guān)系保持一致/
3.4.8并發(fā)消費和順序消費的選擇/
3.4.9起始消費位點的設置/
3.4.10關(guān)于異步消費/
3.4.11消費狀態(tài)處理/
3.5本章小結(jié)/
3.6思考題/
第4章 RocketMQ運維與管理/
4.1RocketMQ Admin Tool/
4.1.1認識RocketMQ管理工具/
4.1.2使用RocketMQ管理工具/
4.2RocketMQ Dashboard/
4.2.1Docker方式安裝 RocketMQ Dashboard/
4.2.2源碼方式安裝 RocketMQ Dashboard/
4.2.3使用 RocketMQ Dashboard/
4.3主題管理實踐/
4.3.1主題分類/
4.3.2主題命名/
4.3.3隊列數(shù)管理/
4.4測試環(huán)境實踐/
4.4.1獨立集群模式/
4.4.2獨立主題模式/
4.4.3Tag路由模式/
4.4.4三種模式的優(yōu)劣對比/
4.5生產(chǎn)環(huán)境運維實踐/
4.5.1集群擴容/
4.5.2集群遷移/
4.6RocketMQ 常見部署架構(gòu)/
4.6.1單主模式/
4.6.2主備模式的架構(gòu)/
4.6.3多主模式的架構(gòu)/
4.6.4同城災備模式/
4.7本章小結(jié)/
4.8思考題/
原理篇
第5章 RocketMQ消費原理/
5.1理解RocketMQ的推模式/
5.1.1Push 模式/
5.1.2Pull 模式/
5.1.3Push模式與Pull模式的優(yōu)劣對比/
5.2了解長輪詢/
5.2.1短輪詢/
5.2.2長輪詢/
5.3RocketMQ長輪詢實現(xiàn)/
5.3.1客戶端增大超時時間/
5.3.2服務端Hold住無數(shù)據(jù)的請求/
5.3.3RocketMQ長輪詢小結(jié)/
5.4RocketMQ的消息拉取優(yōu)化細節(jié)/
5.4.1客戶端請求異步化/
5.4.2服務端超時處理細節(jié)/
5.4.3服務端多線程交互/
5.4.4合并多個 Pull 請求/
5.5消費者線程模型/
5.5.1消費流程涉及的關(guān)鍵線程/
5.5.2消費線程池/
5.6消費進度管理/
5.6.1消費進度存儲/
5.6.2初次啟動從哪里消費/
5.7消息ACK機制/
5.7.1AT LEAST ONCE保證/
5.7.2消息消費失敗進度管理/
5.8消息失敗重試設計/
5.8.1重試主題/
5.8.2延遲重試/
5.9消息消費異常處理/
5.9.1消費超時/
5.9.2卡進度的保護處理/
5.9.3消息重發(fā)與順序性的矛盾/
5.10本章小結(jié)/
5.11思考題/
第6章 RocketMQ負載均衡與消費模式/
6.1負載均衡綜述/
6.2消息生產(chǎn)負載均衡/
6.2.1消息生產(chǎn)負載均衡概述/
6.2.2消息生成負載均衡的原理/
6.3消息消費負載均衡/
6.3.1無中心的隊列負載均衡/
6.3.2無中心負載均衡的核心源碼/
6.3.3消費者負載均衡策略/
6.4無中心負載均衡帶來的弊端/
6.5RocketMQ廣播消息原理/
6.5.1JMS的消息類型/
6.5.2主流消息中間件對發(fā)布/訂閱模式的支持/
6.5.3RocketMQ對發(fā)布/訂閱模式的支持/
6.5.4廣播模式下的可靠性及順序性處理/
6.6本章小結(jié)/
6.7思考題/
第7章 RocketMQ存儲設計/
7.1RocketMQ消息存儲概覽/
7.1.1文件構(gòu)成/
7.1.2消息存儲過程/
7.2RocketMQ存儲與檢索/
7.2.1RocketMQ存儲對比Kafka存儲/
7.2.2RocketMQ存儲設計對比Kafka的優(yōu)勢/
7.3CommitLog文件/
7.3.1CommitLog文件結(jié)構(gòu)/
7.3.2CommitLog抽象模型/
7.3.3CommitLog文件組成/
7.4ConsumeQueue文件/
7.4.1ConsumeQueue文件結(jié)構(gòu)/
7.4.2ConsumeQueue文件組成/
7.5IndexFile文件/
7.5.1IndexFile概覽/
7.5.2IndexFile文件結(jié)構(gòu)/
7.5.3IndexFile文件組成/
7.6本章小結(jié)/
7.7思考題/
第8章 RocketMQ消息高可靠的設計/
8.