Windows平臺搭建Kafka原始碼開發環境(Eclipse版本)

五柳-先生發表於2016-01-25

最近在研究Kafka原始碼,需要自己搭建一個開發環境。官網上給出的提示略顯簡單,照著做了一遍也碰到了一些問題。特此記錄下來。

開發環境: Oracle Java 1.7_u71 + Eclipse 4.4.1 + Scala 2.10.4 + Gradle 2.3 + Kafka 0.8.2.1

一、Gradle安裝配置

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

技術分享

 

二、Kafka原始碼下載

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

技術分享

重要目錄的作用如下:

bin目錄:       Windows和Unix平臺下的執行指令碼,比如kafka-server-start,console-producer,console-consumer等
clients目錄:      Kafka客戶端程式碼
config目錄:       Kafka配置檔案,其中比較重要的是server.properties,啟動Kafka broker需要直接載入這個檔案
contrib目錄:     Kafka與hadoop整合的程式碼,包括hadoop-consumer和hadoop-producer
core目錄:         Kafka的核心程式碼,也是作者後面重點要學習的部分
examples目錄: Kafka樣例程式碼,例如如何使用Java編寫簡單的producer和consumer
system_test:   系統測試指令碼,主要用python編寫
其他的目錄和配置檔案大多和gradle配置有關,就不贅述了。

三、下載gradle wrapper類庫

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

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

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

技術分享

命令執行成功之後,在kafka的gradle子目錄中會多出一個wrapper子目錄,裡面包含了一個jar包和一個配置檔案。至此Gradle wrapper已被成功安裝在本機:

技術分享

四、生成Eclipse工程檔案並匯入到Eclipse中

  上述準備工作一切就緒後,我們現在可以生成Eclipse工程檔案。具體做法為開啟一個cmd視窗,切換到kafka原始碼根路徑下,執行gradlew eclipse,如果是第一次執行,可能會花費一些時間去下載必要的jar包,在等待了一段時間之後,終於看到了BUILD SUCCESSFUL的字樣表示專案工程檔案生成成功:

技術分享

一旦成功生成專案工程檔案,我們就可以將kafka工程匯入到Eclipse中。在Eclipse中Import->Existing Projects into Workspace的介面中可以看到有4個工程:

技術分享

  core工程就是最核心的kafka工程,也是作者後面要重點研究的部分。另外貌似core工程會依賴於clients工程,因此筆者匯入了core和clients兩個工程。匯入之後一切看似很順利,不過後面發現Eclipse提示說core工程報錯:

scalatest_2.10-1.9.1.jar of core build path is cross-compiled with an incompatible version of Scala (2.10.0). In case this report is mistaken, this check can be disabled in the compiler preference page.

  看樣子是Scala compiler的版本問題,於是選中core工程,通過右鍵->Properties->Scala compiler進入Scala編譯器設定介面,將Scala版本設定為2.10,與gradle.properties中的保持一致,順手將target jvm的版本也調成了1.7。儲存重新build之後Eclipse報錯消失。

技術分享

五、配置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 (see zookeeper docs for details).
# This is a comma separated host:port pairs, 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 chroot string 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程式應該會正確地啟動起來,如下圖所示:

技術分享

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

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

轉載: http://www.bubuko.com/infodetail-695974.html

相關文章