當前位置:
首頁 > 知識 > Kafka 源碼分析1 : 基礎搭建和項目結構介紹

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

線上賬務系統餘額並發更新問題記錄
通向架構師的道路(第二十五天)SSH 的單元測試與 dbunit 的整合

TAG:ImportNew |