Idea下Kafka源码阅读编译环境搭建

Kafka源码编译阅读环境搭建

开发环境: Oracle Java 1.7.0_25 + Idea + Scala 2.10.5 +Gradle 2.1 + Kafka 0.9.0.1html

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 验证一下:node

wKioL1hRNM3RxXU_AAAb7OSI_ss634.png-wh_50

2、Kafka源代码下载

  安装好Gradle以后咱们开始下载Kafka的源代码,当前最新的稳定版本是0.10.0.1,目前咱们使用的是0.9.0.1版本,你能够从http://kafka.apache.org/downloads.html处下载源代码包。下载以后解压缩到一个目录,目录结构以下图所示:python

wKioL1hRNQDCAnLVAADffla5kiw012.png-wh_50

重要目录的做用以下:apache

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配置有关,就不赘述了。app

3、下载gradle wrapper类库

  将这个配置单独做为一个步骤是由于官网的教程中并无详细给出这方面的配置方法。若是直接从官网下载了源代码进而执行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

wKiom1hRNRTwvCbhAAAY4ljPAKs730.png-wh_50

命令运行成功以后,在kafkagradle子目录中会多出一个wrapper子目录,里面包含了一个jar包和一个配置文件。至此Gradle wrapper已被成功安装在本机:学习

wKiom1hRNSKSIy4tAABGsRaarpo984.png-wh_50

4、生成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

 

5、配置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

 

6、启动kafka broker

Okay! 如今能够说一切准备就绪了,能够运行kafka了,若是前面全部步骤都执行正确的话,一个kafka broker进程应该会正确地启动起来,以下图所示:

wKiom1hRNWuR6HMTAAG8Yaveh58455.png-wh_50

另外说一下,若是启动时没有看到任何log输出,能够将config目录下的log4j.properties文件拷贝到core\src\main\scala目录下,应该就能解决此问题。

好了,至此你就可使用这个可运行的环境来研究Kafka源代码了。祝你们好运:)

7、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,并研究其源代码了。