開發環境: Oracle Java 1.7.0_25 + Idea + Scala 2.10.5 +Gradle 2.1 + Kafka 0.9.0.1html
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 驗證一下:node
安裝好Gradle以後咱們開始下載Kafka的源代碼,當前最新的穩定版本是0.10.0.1,目前咱們使用的是0.9.0.1版本,你能夠從http://kafka.apache.org/downloads.html處下載源代碼包。下載以後解壓縮到一個目錄,目錄結構以下圖所示:python
重要目錄的做用以下:apache
bin目錄: Windows和Unix平臺下的執行腳本,好比kafka-server-start,console-producer,console-consumer等
clients目錄: Kafka客戶端代碼
config目錄: Kafka配置文件,其中比較重要的是server.properties,啓動Kafkabroker須要直接加載這個文件
contrib目錄: Kafka與hadoop集成的代碼,包括hadoop-consumer和hadoop-producer
core目錄: Kafka的核心代碼,也是做者後面重點要學習的部分
examples目錄: Kafka樣例代碼,例如如何使用Java編寫簡單的producer和consumer
system_test: 系統測試腳本,主要用python編寫
其餘的目錄和配置文件大多和gradle配置有關,就不贅述了。app
將這個配置單獨做爲一個步驟是由於官網的教程中並無詳細給出這方面的配置方法。若是直接從官網下載了源代碼進而執行gradlew eclipse生成項目工程就會報錯:eclipse
Error: Could not find or load main classorg.gradle.wrapper.GradleWrapperMainide
在Kafka源代碼的gradle子目錄中果真沒有wrapper類庫,所以咱們要先安裝一個Gradle Wrapper庫,方法也很簡單,打開個cmd窗口,在Kafka源代碼根目錄下執行gradle wrapper便可。你只需運行這個命令一次便可。若是是首次安裝須要花一些時間去下載所需的jar包。Kafka的源代碼是用Scala語言編寫的,下圖中清晰地顯示咱們使用Scala版本是2.10.4。你能夠在gradle.properties文件中指定Scala版本。oop
命令運行成功以後,在kafka的gradle子目錄中會多出一個wrapper子目錄,裏面包含了一個jar包和一個配置文件。至此Gradle wrapper已被成功安裝在本機:學習
上述準備工做一切就緒後,咱們如今能夠生成IDEA工程文件。具體作法爲打開一個cmd窗口,切換到kafka源代碼根路徑下,運行gradle idea,若是是第一次運行,可能會花費一些時間去下載必要的jar包,在等待了一段時間以後,終於看到了BUILDSUCCESSFUL的字樣表示項目工程文件生成成功:測試
File-->Open
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
Okay! 如今能夠說一切準備就緒了,能夠運行kafka了,若是前面全部步驟都執行正確的話,一個kafka broker進程應該會正確地啓動起來,以下圖所示:
另外說一下,若是啓動時沒有看到任何log輸出,能夠將config目錄下的log4j.properties文件拷貝到core\src\main\scala目錄下,應該就能解決此問題。
好了,至此你就可使用這個可運行的環境來研究Kafka源代碼了。祝你們好運:)
啓動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,並研究其源代碼了。