Kafka之源碼閱讀環(huán)境的構(gòu)建

走近Kafka

走近Kafka之源碼閱讀環(huán)境的構(gòu)建

構(gòu)建準(zhǔn)備:

  • [Ubuntu 18 安裝] Linux衍生系統(tǒng)
  • [Java 1.8+ 版本安裝] Java環(huán)境
  • [Gradle 5.6.4 版本安裝]
    • Kafka源代碼編譯構(gòu)建工具
  • [Git安裝] 代碼管理
  • [zookeeper 安裝] kafka集群構(gòu)建/調(diào)試使用
  • [Scala 2.12.10 安裝] 閱讀源代碼和遠(yuǎn)程調(diào)試使用
  • [IntelliJ Idea安裝] 閱讀源代碼和遠(yuǎn)程調(diào)試使用
    • 安裝scala和lombok插件
    • 由于某些網(wǎng)絡(luò)運(yùn)營(yíng)商屏蔽了IntelliJ 系列的dns映射,所以無(wú)法下載插件的小伙伴可以到[網(wǎng)盤(pán)下載],提取碼: 5e52.解壓后,將兩個(gè)文件夾放到對(duì)應(yīng)的InteliJ的插件目錄下,比如:/home/${user}/.IdeaIC2019.3/config/plugins目錄下,重新啟動(dòng)IntelliJ即可。

開(kāi)始構(gòu)建

  • 創(chuàng)建工作目錄: mkdir kafka_code_location,
    創(chuàng)建一個(gè)目錄作為Kafka源代碼下載目錄,比如kafka_code_location

  • [kafka] 項(xiàng)目倉(cāng)庫(kù)fork到自己的github

  • 切換到工作目錄:cd kafka_code_location,
    從自己的github中pull kafka的源代碼,git clone git@github.com:${username}/kafka.git

  • 分支準(zhǔn)備:進(jìn)入kafka代碼目錄,cd kafka;
    切換到kafka 2.4分支,git checkout 2.4;
    從此分支構(gòu)建自己的分支,git checkout -b your_branch_base_2.4

  • 主要編譯命令說(shuō)明

    • ./gradlew jar構(gòu)建 jar包并運(yùn)行

    • ./gradlew srcJar構(gòu)建源碼包

    • ./gradlew aggregatedJavadoc構(gòu)建javadoc文檔

    • ./gradlew clean清理并構(gòu)建

    • ./gradlew idea構(gòu)建項(xiàng)目

    • ./gradlew eclipse構(gòu)建項(xiàng)目

  • 執(zhí)行 ./gradlew idea

  • 導(dǎo)入項(xiàng)目到 IntelliJ 中

     打開(kāi) IntelliJ,選擇“打開(kāi)工程”,選擇 kafka 目錄即可。
    
    

核心目錄:

  • core: Broker工程代碼。

  • clients: Client工程代碼以及一些公共代碼。

  • streams: Streams工程代碼。

  • connect: Connect工程框架代碼以及FileConnector代碼。

推薦的代碼模塊學(xué)習(xí)順序

  • log其中定義了 Broker底層消息和索引保存機(jī)制以及物理格式。

    • LogLogSegmentLogManager等幾個(gè)類(lèi),主要定義了Kafka底層的消息存儲(chǔ)機(jī)制。
  • controller主要實(shí)現(xiàn)的是Kafka Controller的所有功能,KafkaController.scala文件,它封裝了Controller的所有事件處理邏輯

  • coordinatorgroup包代碼,coordinator包有grouptransaction。

    • 前者封裝的是Consumer Group所用的Coordinator,后者封裝的是支持Kafka事務(wù)的Transaction Coordinator。
      了解Broker是如何管理Consumer Group的。GroupMetadataManagerGroupCoordinator類(lèi),它們定義了Consumer Group的元數(shù)據(jù)信息以及管理這些元數(shù)據(jù)的狀態(tài)機(jī)機(jī)制。
  • network代碼和server包下的部分代碼。

  • Broker主要看KafkaApis.scala。處理請(qǐng)求的主要功能封裝

  • clients:略

  • org.apache.kafka.common.record這個(gè)包下面主要是Kafka消息實(shí)體類(lèi),比如用于在內(nèi)存中傳輸?shù)?code>MemoryRecords類(lèi)以及用于在磁盤(pán)上保存的FileRecords類(lèi)。

  • org.apache.kafka.common.network重點(diǎn)關(guān)注Selector、KafkaChannel,建議更加注重Selector,它們是實(shí)現(xiàn)Client 和 Broker之間網(wǎng)絡(luò)傳輸?shù)闹匾獧C(jī)制。很多網(wǎng)絡(luò)異常問(wèn)題就是這個(gè)包中拋出的!

  • org.apache.kafka.clients.producer它是 Producer 的代碼實(shí)現(xiàn)包,可重點(diǎn)選擇幾個(gè)類(lèi)學(xué)習(xí)即可,比如 KafkaProducer、Sender 或者 RecordAccumulator等。

  • org.apache.kafka.clients.consumer它是 Consumer 的代碼實(shí)現(xiàn)包。同org.apache.kafka.clients.producer,重點(diǎn)閱讀KafkaConsumer、AbstractCoordinator 和 Fetcher等類(lèi)即可。

后續(xù)

  • 后續(xù)將會(huì)使用這個(gè)環(huán)境對(duì)kafka源代碼進(jìn)行學(xué)習(xí)分享
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容