Idea下Kafka源碼閱讀編譯環境搭建

Kafka源碼編譯閱讀環境搭建

開發環境: Oracle Java 1.7.0_25 + Idea + Scala 2.10.5 +Gradle 2.1 + Kafka 0.9.0.1

一、Gradle安裝配置

Kafka代碼自0.8.x之後就使用Gradle來進行編譯和構建了,因此首先需要安裝GradleGradle集成並吸收了Maven主要優點的同時還克服了Maven自身的一些侷限性——你可以訪問https://www.gradle.org/downloads/ 下載最新的Gradle版本。下載解壓到一個目錄,然後創建一個環境變量GRADLE_HOME指向解壓的目錄,再將%GRADLE_HOME%\bin加到PATH環境變量中,Gradle就安裝配置好了。打開一個cmd輸入gradle -v 驗證一下:

wKioL1hRNM3RxXU_AAAb7OSI_ss634.png-wh_50

二、Kafka源代碼下載

  安裝好Gradle之後我們開始下載Kafka的源代碼,當前最新的穩定版本是0.10.0.1,目前我們使用的是0.9.0.1版本,你可以從http://kafka.apache.org/downloads.html處下載源代碼包。下載之後解壓縮到一個目錄,目錄結構如下圖所示:

wKioL1hRNQDCAnLVAADffla5kiw012.png-wh_50

重要目錄的作用如下:

bin目錄:     WindowsUnix平臺下的執行腳本,比如kafka-server-startconsole-producerconsole-consumer
clients目錄:      Kafka客戶端代碼
config目錄:       Kafka配置文件,其中比較重要的是server.properties,啓動Kafkabroker需要直接加載這個文件
contrib目錄:     Kafkahadoop集成的代碼,包括hadoop-consumerhadoop-producer
core目錄:         Kafka的核心代碼,也是作者後面重點要學習的部分
examples目錄: Kafka樣例代碼,例如如何使用Java編寫簡單的producerconsumer
system_test:   系統測試腳本,主要用python編寫
其他的目錄和配置文件大多和gradle配置有關,就不贅述了。

三、下載gradle wrapper類庫

  將這個配置單獨作爲一個步驟是因爲官網的教程中並沒有詳細給出這方面的配置方法。如果直接從官網下載了源代碼進而執行gradlew eclipse生成項目工程就會報錯:

Error: Could not find or load main classorg.gradle.wrapper.GradleWrapperMain

  在Kafka源代碼的gradle子目錄中果然沒有wrapper類庫,因此我們要先安裝一個Gradle Wrapper庫,方法也很簡單,打開個cmd窗口,在Kafka源代碼根目錄下執行gradle wrapper即可。你只需運行這個命令一次即可。如果是首次安裝需要花一些時間去下載所需的jar包。Kafka的源代碼是用Scala語言編寫的,下圖中清晰地顯示我們使用Scala版本是2.10.4。你可以在gradle.properties文件中指定Scala版本。

wKiom1hRNRTwvCbhAAAY4ljPAKs730.png-wh_50

命令運行成功之後,在kafkagradle子目錄中會多出一個wrapper子目錄,裏面包含了一個jar包和一個配置文件。至此Gradle wrapper已被成功安裝在本機:

wKiom1hRNSKSIy4tAABGsRaarpo984.png-wh_50

四、生成IDEA工程文件並導入到IDEA

上述準備工作一切就緒後,我們現在可以生成IDEA工程文件。具體做法爲打開一個cmd窗口,切換到kafka源代碼根路徑下,運行gradle idea,如果是第一次運行,可能會花費一些時間去下載必要的jar包,在等待了一段時間之後,終於看到了BUILDSUCCESSFUL的字樣表示項目工程文件生成成功:

wKioL1hRNTDwCzadAABII_C_hgo147.png-wh_50

項目導入到IDEA工程中

File-->Open

wKiom1hRNUKDlpSuAABtVOYhYKY716.png-wh_50

IDEA中查看源碼工程

wKioL1hRNVLzdzdhAABI59QSFyQ683.png-wh_50

 

五、配置server.properties

kafka broker啓動時需要加載server.properties文件。該文件默認位置是在config目錄下,因此需要設置運行kafka.Kafka.scala時的Program arguments../config/server.properties以保證Kafka.scala能夠找到該配置文件。

  另外,由於kafka broker會將一些元數據信息保存在zookeeper中,因此在啓動kafka broker之前必須要先有一個啓動着的zookeeper實例或集羣,然後我們還需要在server.properties文件更新zookeeper連接信息(主機名:端口CSV列表),如下圖所示:

 

# Zookeeper connection string (seezookeeper docs for details).

# This is a comma separated host:portpairs, each corresponding to a zk

# server. e.g."127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".

# You can also append an optional chrootstring to the urls to specify the

# root directory for all kafka znodes.

zookeeper.connect=10.11.207.97:2181

 

# Timeout in ms for connecting to zookeeper

zookeeper.connection.timeout.ms=6000

 

六、啓動kafka broker

Okay! 現在可以說一切準備就緒了,可以運行kafka了,如果前面所有步驟都執行正確的話,一個kafka broker進程應該會正確地啓動起來,如下圖所示:

wKiom1hRNWuR6HMTAAG8Yaveh58455.png-wh_50

另外說一下,如果啓動時沒有看到任何log輸出,可以將config目錄下的log4j.properties文件拷貝到core\src\main\scala目錄下,應該就能解決此問題。

好了,至此你就可以使用這個可運行的環境來研究Kafka源代碼了。祝大家好運:)

七、log4j.properties文件路徑設置

啓動kafka server很奇怪, log4j.properties文件找不到,報如下錯誤。

log4j:WARN No appenders could be found forlogger (kafka.utils.VerifiableProperties). 
log4j:WARN Please initialize the log4j system properly.

只有把 log4j.properties放置到src/main/Scala路徑下,才能找到文件,然後運行程序,正確輸出日誌信息。

 

通過如上7步後就可以正確啓動kafka程序,進行相關debug,並研究其源代碼了。

 


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章