(點選上方公眾號,可快速關註)
來源:劉正陽 ,
liuzhengyang.github.io/2017/12/31/kafka-source-1-architecture/
背景
從kafka也算有兩年了,用它做了不少專案,但是之前對它的認識也僅僅停留在一些從其他地方聽到的概念和官方檔案的documentation上在遇到一些問題時往往不知道其原理只能按照道聽途說的概念來理解。既然kafka能夠成為這麼多公司的選擇肯定有很不錯的實現,所以還是要翻閱程式碼一看究竟,一來學習別人的程式碼二來能夠對kafka有更深入的瞭解。當前版本是0.11.0。
環境搭建
git clone https://github.com/apache/kafka
cd kafka
./gradlew idea
然後用idea匯入就可以了。
開啟後可以看到很多module,不過server的實現是在core模組裡,這也是需要著重瞭解的地方。
debug
研究工程程式碼還是從debug開始比較好,kafka很友好的最外層放了一個Kafka.scala檔案,main方法就在裡面,不過在開始之前需要給main配置debug configuration。
把server.properties的路經加到program arguments,以及在enviroment裡新增一個log4j.properties配置,這裡我是從test裡copy了一個到score/src/resources目錄下,建立了resources目錄。
cd到bin目錄, 建立一個zookeeper server
./zookeeper-server-start.sh ../config/zookeeper.properties
然後就可以愉快的打斷點debug了。
在啟動過程完成後,可以用bin裡的producer、consumer example來觸發生產消費的邏輯。
目錄介紹
clients模組是用於Java應用的生產者、消費者的客戶端程式碼
core模組是kafka server也就是kafka cluster的程式碼
core module裡分了一些package,我們可以從它們的名字和裡面的package.html(如果有的話)大概看出這個package的用途。
-
admin 提供管理功能
-
api
-
cluster 叢集相關的程式碼,裡麵包括了Partition、Replica等
-
common 一些常用的公共類,又不好起包名字的:)
-
consumer 消費者程式碼,已經deprecated,並且挪到clients模組裡了
-
controller
-
coordinator
-
javaapi
-
log log管理模組, log是kafka中儲存訊息的方式,可以參考The log這邊文章檢視更多
-
message 定義了Message,也就是message queue中的message…,還有壓縮
-
metrics kafka監控統計
-
network 網路層的處理,nio的一層封裝
-
producer 生產者api,也已經遷移到clients module了。
-
security 許可權管理
-
serializer 定義Encoder和Decoer介面和一些基礎的如String、Long的實現
-
server kafka server的主要實現邏輯
-
tools 各種可以獨立執行的工具,
-
utils 各種工具類
整體思路
整體思路上來講,我們按照服務端和客戶端來分別講。希望讀者不被繞暈
推薦的書/資源
-
https://kafka.apache.org/documentation/
-
kafka-definitive-guide-complete
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能