歡迎光臨
每天分享高質量文章

Kafka 原始碼分析1 : 基礎搭建和專案結構介紹

(點擊上方公眾號,可快速關註)


來源:劉正陽 ,

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技能

赞(0)

分享創造快樂