Kafka源码开发环境搭建
开发环境和工具
- mac os
- gradle 4.8
- java 1.8
- scala 2.11.12
- kafka-1.1.0-src
- idea 2018.1.2
- scala-intellij-bin-2018.1.10.zip
下载源码:
仓库地址:
https://codeload.github.com/apache/kafka/zip/trunk
安装 Gradle
要搭建 Kafka 开发环境,你必须要安装好 Gradle,把 Gradle 环境加入到环境变量中。
同时在 IDEA 中安装可以设置 gradle的位置。
镜像仓库到阿里云
修改里build.gradle的镜像仓库到阿里云
build.gradle 中 设置 aliyun 代理 build.gradle
buildscript {
repositories {
// mavenCentral() //原有注释
//新增
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
jcenter()
}
}
allprojects {
repositories {
// mavenCentral() //原有注释
//新增
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
build.gradle 中 dependencies 修改
dependencies {
// For Apache Rat plugin to ignore non-Git files
classpath "org.ajoberstar:grgit:1.9.3"
classpath 'com.github.ben-manes:gradle-versions-plugin:0.15.0'
classpath 'org.scoverage:gradle-scoverage:2.5.0' // 将2.1.0修改为2.5.0
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
修改gradle/buildscript.gradle 里的镜像仓库到阿里云
repositories {
repositories {
// For license plugin.
maven {
//url 'http://dl.bintray.com/content/netflixoss/external-gradle-plugins/' //原有注释
//新增
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
}
win10安装scala
查看版本
从源码的配置文件中,可以看到需要 2.11.12版本的scala
下载安装scalaMSI安装文件
从Scala官方网站下载,
https://www.scala-lang.org/download/all.html
windows版本的安装包是scala-XX.XX.XX.msi。 ·使用下载下来的安装包安装Scala
也可以从疯狂创客圈的 网盘下载
安装 scala
点击安装即可
配置scala环境变量
SCALA_HOME:scala安装目录
Path:%SCALA_HOME%\bin;
在gitbash中输入scala验证scala是否成功安装
MINGW64 /e/ref/kafka
$ scala
Welcome to Scala 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_91).
Type in expressions for evaluation. Or try :help.
scala>
源码编译
下载 Gradle 的 Wrapper 程序套件
代码下载完成之后,会自动创建一个名为 kafka 的子目录,此时需要进入到该目录下,执行下面的这条命令,主要目的是下载 Gradle 的 Wrapper 程序套件。
$ gradle
Starting a Gradle Daemon (subsequent builds will be faster)
> Configure project :
Building project 'core' with Scala version 2.12.9
Building project 'streams-scala' with Scala version 2.12.9
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.3/userguide/command_line_interface.html#sec:command_line_warning
Gradle 的 Wrapper 程序套件 叫做 gradlew, 是一个shell脚本,需要 在shell 执行工具中打开。
可以在 gitbash 中打开。
通过gitbash 将 Kafka 源码编译打包成 Jar 文件
通过gitbash ,在windows上使用shell脚本:
现在,你可以运行下列命令,将 Kafka 源码编译打包成 Jar 文件:
gradle在执行build的时候想跳过test task,那么可以使用-x命令
-x参数用来排除不需要执行的任务
./gradlew jarall
./gradlew clean releaseTarGz -x test
执行过程
MINGW64 /e/ref/kafka/kafka (1.1)
$ gradlew jarall
Downloading https://services.gradle.org/distributions/gradle-4.8.1-all.zip
................................................................................ .........................
Welcome to Gradle 4.8.1!
Here are the highlights of this release:
- Dependency locking
- Maven Publish and Ivy Publish plugins improved and marked stable
- Incremental annotation processing enhancements
- APIs to configure tasks at creation time
For more details see https://docs.gradle.org/4.8.1/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Configure project :
Building project 'core' with Scala version 2.11.12
> Configure project :kafka
Building project 'core' with Scala version 2.11.12
./gradlew clean releaseTarGz -x test
经过一系列操作之后,比如 Gradle 拉取依赖 Jar 包、编译 Kafka 源码、打包等,结果终于出来,
你可以在 core 的 build/distributions 下面找到生成的 tgz 包:
解压之后,这就是一个可以正常启动运行的 Kafka 环境了。
编译过程中遇到的问题:
raw.githubusercontent.com域名不能访问的问题
修改hosts,解决raw.githubusercontent.com域名不能访问的问题。
在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。
sudo vim /etc/hosts
199.232.28.133 raw.githubusercontent.com
SSL传输问题
编译中遇到错误
curl: (35) Unknown SSL protocol error in connection to raw.githubusercontent.com:443
解决措施, 让请求忽略SSL传输。
在git的config文件中增加
[http]
sslVerify = false
或在命令行窗口输入:
git config http.sslVerify "false"
还有一大堆的告警信息
直接忽略
把 Kafka 源码工程导入到 IDEA 中
这也是搭建开发环境的最后一步。
如果你用的是 Eclipse,执行下面的指令即可
./gradlew eclipse
如果你用的是 IDEA,你可以先执行下面的命令去创建 IDEA 项目所需要的项目文件:
$ ./gradlew idea
接着,你需要打开 IDEA,选择“打开工程”即可。
至此,我们就在 IDEA 中搭建了 Kafka 源码环境。
idea scala插件安装
在线安装idea的 scala 插件
直接install很慢,会失败,采用离线的方式
idea scala插件离线安装
先查看自己需要的scala 插件版本,查看方法如下:
打开idea 找到右下角Configure->Plugins 点进去搜索scala 点击Search in repositories,最后找到updated 那个时间
打开下面的连接:
http://plugins.jetbrains.com/plugin/1347-scala
下载对应版本的scala插件
下载完成后 进入Configure->Plugins 下点击右下角 Install plugin from disk.... 选择你下载的scala插件地址
到此完成安装
运行 Kafka的broker
你可以打开 Kafka.scala 文件,右键选择“运行”
这时,你应该可以看到启动 Kafka Broker 的命令行用法说明,如下图所示:
你可以进到不同的方法里面去看实际的请求处理逻辑。
比如 handleProduceRequest 方法是处理 Producer 生产消息请求的,而 handleFetchRequest 方法则是处理消息读取请求的。
我们刚刚说的都是 core 代码包下的重要类文件。在客户端 clients 包下,我推荐你重点阅读 4 个部分的内容。
- org.apache.kafka.common.record 包。这个包下面是各种 Kafka 消息实体类,比如用于在内存中传输的 MemoryRecords 类以及用于在磁盘上保存的 FileRecords 类。
- org.apache.kafka.common.network 包。这个包不用全看,你重点关注下 Selector、KafkaChannel 就好了,尤其是前者,它们是实现 Client 和 Broker 之间网络传输的重要机制。如果你完全搞懂了这个包下的 Java 代码,Kafka 的很多网络异常问题也就迎刃而解了。
- org.apache.kafka.clients.producer 包。顾名思义,它是 Producer 的代码实现包,里面的 Java 类很多,你可以重点看看 KafkaProducer、Sender 和 RecordAccumulator 这几个类。
- org.apache.kafka.clients.consumer 包。它是 Consumer 的代码实现包。同样地,我推荐你重点阅读 KafkaConsumer、AbstractCoordinator 和 Fetcher 这几个 Java 文件。
另外,在阅读源码的时候,不管是 Broker 端还是 Client 端,你最好结合 Java 调试一起来做。通过 Debug 模式下打断点的方式,一步一步地深入了解 Kafka 中各个类的状态以及在内存中的保存信息,这种阅读方式会让你事半功倍。
idea配置运行kafka
首先运行虚拟机的zookeeper
接着idea中运行,kafka,create topic, producer,consumer
直接idea打开源码工程后,配置运行的应用设置。
配置Run/Debug Configurations
kafka
参数
config/server.properties
create topic(test)
参数
--create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
producer
参数
--topic test --broker-list localhost:9092
- consumer
参数
--bootstrap-server localhost:9092 --from-beginning --topic test
运行
首先运行本地的zookeeper,接着idea中运行,kafka,create topic, producer,consumer
- kafka
- create topic
- producer
- consumer