RocketMQ 實戰與原理解析
內容簡介
本書由雲棲社群官方出品。
本書作者是阿里資深資料專家,對 RocketMQ 有深入的研究,並有大量的實踐經驗。在寫這本書之前,作者不僅系統、深入地閱讀了 RocketMQ 的原始碼,而且還向 RocketMQ 的官方開發團隊深入瞭解了它的諸多設計細節。作者結合自己多年使用 RocketMQ 的經驗,從開發和運維兩個維度,給出了大部分場景下的優秀實踐,能幫助讀者在學會使用和用好 RocketMQ 的同時,儘量少“踩坑”。同時,本書也結合原始碼分析了分散式訊息佇列的原理,使讀者可以在複雜業務場景下定製有特殊功能的訊息佇列。
適讀人群
- 需要在工作中使用分散式訊息佇列的人;
- 對分散式系統原理感興趣的人;
- 普通 Java 程式設計師;
- 希望學習優秀程式碼和設計方法的人
作者簡介
楊開元,阿里巴巴資料專家,畢業於北京大學,有10年 IT 行業研發經驗。對 RocketMQ 有深入的研究,是 RocketMQ 原始碼貢獻者。曾就職於甲骨文和獵豹移動,專注於大資料和實時計算。在大量的工作實踐中,對 MySQL、J2EE、JVM、Spring、Hadoop、Kafka、Storm、Flink 都有深入研究。喜歡剖析原始碼,分析原理,為開源專案貢獻程式碼。
本書內容
推薦序
在阿里巴巴技術發展初期,伴隨著淘寶業務的快速發展,網站流量呈現幾何級增長。單體巨無霸式的應用無法處理爆發式增長的流量,阿里內部從業務、組織層面進行了一次大的水平與垂直切分,拆分出使用者中心、商品中心、交易中心、評價中心等平臺型應用,分散式電商系統的雛形由此誕生。阿里的訊息引擎就是在這樣的大背景下誕生的,並被應用於各個應用系統之間的非同步解耦和削峰填谷。
從最初的日誌傳輸領域到後來阿里集團全維度線上業務的支撐,RocketMQ 被廣泛用於交易、資料同步、快取同步、IM 通訊、流計算、IoT 等場景。在近幾年的雙11全球狂歡節中,RocketMQ 以萬億級的訊息總量支撐了全集團3000多個應用,為複雜的業務場景提供了系統解耦、削峰填谷的能力,保障了核心交易鏈路訊息流轉的低延遲、高吞吐,為阿里集團大中臺的穩定性發揮了舉足輕重的作用。
為了更好地發展 RocketMQ 社群生態,2016年雙11前後,阿里巴巴將 RocketMQ 捐贈給 Apache 基金會,吸引了全球的開源愛好者參與到 RocketMQ 社群中,並於2017年9月成為 Apache 基金會的頂級專案。在開源社群的幫助下,RocketMQ 具備了對接主流大資料流計算平臺、離線上資料處理以及對接儲存平臺的能力。
本書介紹了分散式訊息中介軟體 RocketMQ 的方方面面,作者為大資料領域的技術專家,在分散式領域具有很豐富的理論積累和實戰經驗。書如其人,書中各章節盡展實戰經驗,庖丁解牛般剖析了 Apache RocketMQ 的原理和架構設計。本書深入淺出地分析了 RocketMQ 的整體架構,分享了部署和運維的經驗,涵蓋 RocketMQ 的核心特性——高可用、高可靠機制,以及開源生態等。
本書作為國內首本全面解析 Apache RocketMQ 的書籍,對於希望瞭解 RocketMQ 技術內幕,以及想要掌握分散式系統設計理念的技術人員來說的確不容錯過。
——周新宇,Apache RocketMQ 專案管理委員會成員
前言
為什麼要寫這本書
幾年前在做一個專案的時候,若需要用到訊息佇列,簡單調研一下就會決定用 Kafka,因為當時還不知道有 RocketMQ。在我加入阿里後,當時有個專案需要用到訊息中介軟體,試用了 RocketMQ,發現阿里開源的訊息中介軟體效能非常強大,但是上手有點費勁,因為現有文件多是零零散散的博文。在沒有合適文件指導的情況下,對系統中用到的 RocketMQ 模組心裡沒底,系統偶爾出現異常時總會束手無策,需要通過檢視很多原始碼,才能保證系統的穩定執行。
熟悉 RocketMQ 以後,我發現它是一款非常優秀的中介軟體產品,可以確保不丟訊息,而且效率很高。同時因為它是用 Java 開發的,所以修改起來比較容易。
在阿里內部,RocketMQ 很好地服務了集團大大小小上千個應用,在每年的雙十一當天,更有不可思議的萬億級訊息通過 RocketMQ 流轉(在2017年的雙11當天,整個阿里巴巴集團通過 RocketMQ 流轉的線上訊息達到了萬億級,峰值 TPS 達到5600萬),在阿里大中臺策略上發揮著舉足輕重的作用。所以如果有合適的參考文件,RocketMQ 會被更多人接受和使用,讓更多人不必重複造“輪子”。
我做了很多年開發,在學校課本上學的開發知識有限,大多數是通過看書和上網學到的,其中很多優秀的文章對自己幫助很大。所以我很希望能用這本書回饋技術社群中有需要的開發者們。
動筆寫這本書前,我係統地閱讀了 RocketMQ 的原始碼,有些理解不夠透徹的地方請教了阿里 RocketMQ 開發團隊的同事,然後也總結了自己多年實際工作中的一些經驗。希望這本書能簡明扼要地說清楚 RocketMQ 的使用方法和核心原理。
讀者物件
- 希望學習分散式系統或分散式訊息佇列的開發人員。
- 服務端系統開發者,他們可以藉助高質量中介軟體來提高開發效率。
- 軟體架構師,他們可以通過訊息佇列優化複雜系統的設計。
本書特色
本書系統地介紹了 RocketMQ 這款優秀的分散式訊息佇列軟體,通過閱讀本書,讀者可以快速把 RocketMQ 應用到自己的專案中,也可以通過更改原始碼定製符合自身業務的訊息中介軟體。
如何閱讀本書
本書分為兩大部分:
第一部分是 RocketMQ 實戰,包括第1~8章。這是本書的主體內容,可幫助讀者快速用好 RocketMQ 這個分散式訊息佇列。
這部分是按照由淺入深的方式撰寫的,為了讓讀者快速上手,首先介紹了搭建一個簡單 RocketMQ 叢集的方法,以此來發送和接收訊息;然後詳細介紹瞭如何用好 Consumer 和 Producer,如何選擇合適的類以及進行引數設定;再進一步根據應用,說明如何讓 RocketMQ 在各種異常情況下保持穩定可靠,以及如何增大 RocketMQ 的吞吐量,從而在單位時間內處理更多的訊息。
第二部分是原始碼分析,包括第9~13章。當讀者有特殊的業務需求,需要更改或擴充套件 RocketMQ 現有功能的時候,這部分內容能幫助讀者快速熟悉原始碼,找到要下手更改的地方,快速實現想要的功能。
這部分也適合想通過原始碼,深入學習訊息佇列的讀者閱讀。學習別人優秀的程式碼是提升自己技術水平的一條有效途徑。
勘誤和支援
由於水平有限,編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。有任何的意見或建議,都可以通過郵箱 [email protected] 和我聯絡,真摯期待你的反饋。
致謝
寫技術書籍很耗費時間,加之網際網路行業快節奏的工作方式,導致我寫這本書的時間大多是在週末和夜晚。在此感謝家人對我的支援和理解,尤其感謝我的妻子,沒有她對家庭的照顧和對我的鼓勵,這本書是無法完成的。
感謝阿里訊息中介軟體團隊的 Leader 王小瑞,是你從技術和寫作思路上給我很大的幫助。感謝訊息中介軟體團隊的其他同學,你們為開源社群貢獻了一個高質量的軟體,你們寫的很多高質量博文使開發者更容易理解 RocketMQ。
感謝機械工業出版社的編輯楊福川、張錫鵬,感謝雲棲社群的刁雲怡,阿里的校友耿嘉安,是你們始終支援我的寫作,你們的引導和幫助使我能順利完成全部書稿。
謹以本書獻給我最親愛的家人,以及眾多熱愛軟體開發工作的朋友們!
楊開元
第1章 快速入門
第2章 生產環境下的配置和使用
第3章 用適合的方式傳送和接收訊息(上)
第3章 用適合的方式傳送和接收訊息(下)
第4章 分散式訊息佇列的協調者
第5章 訊息佇列的核心機制
第6章 可靠性優先的使用場景
第7章 吞吐量優先的使用場景
第8章 和其他系統互動
第9章 首個 Apache 中介軟體頂級專案
第10章 NameServer 原始碼解析
第11章 最常用的消費類
第12章 主從同步機制
第13章 基於 Netty 的通訊實現(上)
第13章 基於 Netty 的通訊實現(下)
閱讀全文: http://gitbook.cn/gitchat/geekbook/5bcd6683211d0e68b1b725ca