在對Kafka使用層面掌握後,進一步提高分析其源碼是極有必要的。縱觀Kafka源碼工程結構,不算太複雜,代碼量也不算大。分析研究其實現細節難度不算太大。今天筆者給你們分析的是其核心處理模塊,core模塊。java
首先,咱們須要對Kafka的工程結構有一個總體的認知度,Kafka 你們最爲熟悉的就是其消費者與生產者。然其,底層的存儲機制,選舉機制,備份機制等實現細節,須要咱們對其源碼仔細閱讀學習,思考與分析其設計之初的初衷。下面,咱們首先來看看Kafka源碼工程模塊分佈,截止當天日期,官方託管在 Github 上的 Kafka 源碼版本爲:0.10.2.1,其工程分佈結構以下圖所示:git
這裏筆記只針對core模塊進行說明,其餘模塊均是啓動腳本,文檔說明,測試類或是Java客戶端的相關代碼,本篇博客就很少作贅述了。github
模塊名 | 說明 |
admin | kafka的管理員模塊,操做和管理其topic,partition相關,包含建立,刪除topic,或者拓展分區等。 |
api | 主要負責數據交互,客戶端與服務端交互數據的編碼與解碼。 |
client | 該模塊下就一個類,producer讀取kafka broker元數據信息,topic和分區,以及leader。 |
cluster | 這裏包含多個實體類,有Broker,Cluster,Partition,Replica。其中一個Cluster由多個Broker組成,一個Broker包含多個Partition,一個Topic的全部Partition分佈在不一樣的Broker中,一個Replica包含都個Partition。 |
common | 這是一個通用模塊,其只包含各類異常類以及錯誤驗證。 |
consumer | 消費者處理模塊,負責全部的客戶端消費者數據和邏輯處理。 |
controller | 此模塊負責中央控制器的選舉,分區的Leader選舉,Replica的分配或其從新分配,分區和副本的擴容等。 |
coordinator | 負責管理部分consumer group和他們的offset。 |
javaapi | 提供Java語言的producer和consumer的API接口。 |
log | 這是一個負責Kafka文件存儲模塊,負責讀寫全部的Kafka的Topic消息數據。 |
message | 封裝多條數據組成一個數據集或者壓縮數據集。 |
metrics | 負責內部狀態的監控模塊。 |
network | 該模塊負責處理和接收客戶端鏈接,處理網絡時間模塊。 |
producer | 生產者的細節實現模塊,包括的內容有同步和異步的消息發送。 |
security | 負責Kafka的安全驗證和管理模塊。 |
serializer | 序列化和反序列化當前消息內容。 |
server | 該模塊涉及的內容較多,有Leader和Offset的checkpoint,動態配置,延時建立和刪除Topic,Leader的選舉,Admin和Replica的管理,以及各類元數據的緩存等內容。 |
tools | 閱讀該模塊,就是一個工具模塊,涉及的內容也比較多。有導出對應consumer的offset值;導出LogSegments信息,以及當前Topic的log寫的Location信息;導出Zookeeper上的offset值等內容。 |
utils | 各類工具類,好比Json,ZkUtils,線程池工具類,KafkaScheduler公共調度器類,Mx4jLoader監控加載器,ReplicationUtils複製集工具類,CommandLineUtils命令行工具類,以及公共日誌類等內容。 |
閱讀Kafka源碼須要準備如下環境:api
關於環境的搭建,你們能夠利用搜索引擎去完成,比較基礎,這裏就很少贅述了。而後在源碼工程目錄下執行如下命令:緩存
如何選擇,可按照本身所使用的編輯器便可。這裏筆者所使用的是IDEA,執行命令後,會在源碼目錄生成如下文件,以下圖所示:安全
而後,在編輯器中導入該源碼項目工程便可,以下圖所示:網絡
這裏,咱們先在config模塊下設置server.properties文件,按照本身的須要設置,好比分區數,log的存儲路徑,zookeeper的地址設置等等。而後,咱們在編輯器中的運行中設置相關的啓動參數,以下圖所示:eclipse
啓動類Kafka.scala在core模塊下,須要注意的是,這裏在啓動Kafka以前,確保咱們以前在server.properties文件中所配置的Zookeeper集羣已正常運行,而後咱們在編輯器中運行Kafka源碼,以下圖所示:異步
這裏,咱們作一下簡單的修改,在啓動類的開頭打印一句啓動日誌和啓動時間,部分運行日誌和運行結果截圖以下所示:編輯器
Start Kafka,DateTime[1494065094606] [2017-05-06 18:04:54,830] INFO KafkaConfig values: advertised.host.name = null advertised.listeners = null advertised.port = null authorizer.class.name = auto.create.topics.enable = true auto.leader.rebalance.enable = true background.threads = 10 broker.id = 0 broker.id.generation.enable = true broker.rack = null compression.type = producer connections.max.idle.ms = 600000 controlled.shutdown.enable = true
如上圖,紅色框便是咱們簡單的添加的一句代碼。
本篇博客給你們介紹了Kafka源碼的core模塊下各個子模塊所負責的內容,以及如何便捷的去閱讀源碼,以及在編輯器中運行Kafka源碼。後續,再爲你們分析Kafka的存儲機制,選舉機制,備份機制等內容的實現細節。最後,歡迎你們使用Kafka-Eagle監控工具。
這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!