前 言
初識Kafka 時,筆者接觸的還是0.8.1 版本,Kafka 發展到目前的2.0.0 版本,筆者也見證了Kafka 的蛻變,例如舊版用戶端的淘汰、新版用戶端的設計、Kafka 控制器的反覆運算最佳化、私有協定的變更、交易功能的引用等。Kafka 從昔日的新星逐漸走向成熟,再到今日的王者地位不可撼動,這期間有太多的故事可講。
剛接觸Kafka 時,市面上很少有關於Kafka 的書籍。在學習Kafka 的過程中也經歷過很多挫敗,例如Scala 這門程式語言就讓筆者在Kafka 的原始程式大門外卻步良久。那時候就在想,如果有一本書能夠全方位地解析Kafka 該有多好啊。
隨著對Kafka 的逐步了解,也漸漸地萌生了自己寫一本關於Kafka 的書的想法,產生這一想法至今已超過兩年。在這期間,筆者陰差陽錯地先寫了一本關於RabbitMQ 的書,此時已是2017 年年末,市面上已經陸續出現了好幾本有關Kafka 的書,而且此時Kafka 的版本也已經升級到1.0.0。
筆者認真看過幾乎所有現存的Kafka 的書籍,回想這一路學習和使用Kafka 的經歷,深感這些都不是自己理想中的書籍,那麼不如自己再“操刀”寫一本。本書秉承能用文字表述的就不貼原始程式、能用圖形輔助的就不乏味陳述;既要讓新手能夠快速入門,也要讓老手有所收穫,從基礎概念入手,再到原理深入,讓讀者能夠由淺入深地了解Kafka。
本書依據Kafka 2.0.0 版本撰寫,所有內容都具備理論基礎並全部實作過,也是筆者在工作中的認知累積,希望本書能夠讓讀者有所收穫。
💮 內容大綱
本書共12 章,前後章節都有對應的聯繫,基本上按照由淺入深、由表及裡的層次逐層說明,如果讀者對其中的某些內容已經掌握,可以選擇跳過而翻閱後面的內容,不過還是建議讀者按照先後順序進行閱讀。
第1 章對Kafka 的基礎概念進行籠統的介紹,之後說明如何安裝與設定Kafka,以及透過簡單的生產消費訊息的範例讓讀者能夠快速地入門。
第2 章主要是針對生產者用戶端的說明,包含生產者用戶端參數、訊息的發送、序列化、分區器、攔截器、原瞭解析等內容。
第3 章主要是針對消費者用戶端的說明,包含消費者用戶端參數、主題與分區的訂閱、反序列化、訊息的消費、位移傳送、再均衡、攔截器、多執行緒實現等內容。
第4 章主要介紹主題與分區的管理,包含建立主題、修改主題、刪除主題、主題端參數設定、優先備份、分區重分配、複製限流,以及對分區數抉擇的探討等內容。
第5 章主要說明記錄檔儲存相關的內容,包含檔案目錄的版面配置、記錄檔格式的演變、記錄檔清理的細節、底層儲存的原理等內容。
第6 章主要對Kafka 服務端的一些內部核心內容進行詳細的說明,包含協定設計、延遲時間操作、控制器、leader 的選舉等內容。
第7 章主要是對Kafka 客戶端相關的原理剖析,當然其中也需要牽涉服務端的內容。這一章包含消費端分區分配策略、消費者協調器和組協調器、__consumer_offsets 的剖析、交易的介紹等內容。
第8 章主要對可用性、一致性等核心原理進行陳述,本章內容最為抽象,主要包含故障備份、ISR 伸縮、LEO 與HW、Leader Epoch 的介入、記錄檔同步機制、可用性分析等內容。
第9 章主要是對Kafka 相關應用的一些補充,包含一些重要的管理工具,還有Kafka Connect、Kafka Mirror Maker 和Kafka Streams 等內容。
第10 章是與Kafka 監控相關的內容,監控作為Kafka 生態中的必備內容,具有相當重要的地位,透過學習本章的內容可以讓讀者對整個監控的脈絡設計和底層實現有清晰的認知。
第11 章是對Kafka 做一些功能性的擴充,包含過期時間、延遲時間佇列、無效信件佇列、重試佇列、訊息路由、訊息軌跡、訊息稽核、訊息代理等內容,最後還透過對訊息中介軟體選型的說明以期讓讀者對整個訊息中介軟體領域有發散性的思考。
第12 章主要說明的是Kafka 與Spark 整合的一些內容,包含Spark 基本概念、Spark Streaming、Structured Streaming,以及它們與Kafka 整合的細節等內容。
💮 讀者討論
由於筆者水準有限,書中難免有錯誤之處。若您對本書有任何疑問都可以透過zhuzhonghua.ideal@qq.com 發送郵件給筆者,也可到筆者的個人部落格http://blog.csdn.net/u013256816 中留言,向筆者說明您的建議和想法。書中的原始程式會在本書發行之後進行整理,最後會公佈在筆者的個人微信公眾號。
💮 致謝
首先要感謝我身處的平台,讓我有機會深入地接觸Kafka。同時要感謝我身邊的同事,正因為有了你們的鼓勵和幫助,才讓我能夠迅速地成長,本書的問世,離不開與你們在工作中一起累積的點點滴滴。
感謝蔣曉峰同學不辭辛苦地為本書校稿,才會讓本書更加完善。
感謝在我部落格、微信公眾號中提問留言的朋友,感謝訊息生態圈的朋友,有了你們的意見和建議才能讓本書更加完善。
感謝博文視點的編輯們,你們的敬業精神和一絲不苟的工作態度。
最後還要感謝我的家人,在我佔用絕大部分的業餘時間進行寫作的時候,能夠給予我相當大的寬容、了解和支援,讓我能夠全身心地投入寫作之中。
朱忠華