仓库地址:
https://codeload.github.com/apache/kafka/zip/trunk
要搭建 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/' } } }
从源码的配置文件中,可以看到需要 2.11.12版本的scala
从Scala官方网站下载,
https://www.scala-lang.org/download/all.html
windows版本的安装包是scala-XX.XX.XX.msi。 ·使用下载下来的安装包安装Scala
也可以从疯狂创客圈的 网盘下载
点击安装即可
SCALA_HOME:scala安装目录
Path:%SCALA_HOME%\bin;
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>
代码下载完成之后,会自动创建一个名为 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 ,在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 环境了。
修改hosts,解决raw.githubusercontent.com域名不能访问的问题。
在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。
sudo vim /etc/hosts 199.232.28.133 raw.githubusercontent.com
编译中遇到错误
curl: (35) Unknown SSL protocol error in connection to raw.githubusercontent.com:443
解决措施, 让请求忽略SSL传输。
在git的config文件中增加
[http] sslVerify = false
或在命令行窗口输入:
git config http.sslVerify "false"
直接忽略
这也是搭建开发环境的最后一步。
如果你用的是 Eclipse,执行下面的指令即可
./gradlew eclipse
如果你用的是 IDEA,你可以先执行下面的命令去创建 IDEA 项目所需要的项目文件:
$ ./gradlew idea
接着,你需要打开 IDEA,选择“打开工程”即可。
至此,我们就在 IDEA 中搭建了 Kafka 源码环境。
直接install很慢,会失败,采用离线的方式
先查看自己需要的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.scala 文件,右键选择“运行”
这时,你应该可以看到启动 Kafka Broker 的命令行用法说明,如下图所示:
你可以进到不同的方法里面去看实际的请求处理逻辑。
比如 handleProduceRequest 方法是处理 Producer 生产消息请求的,而 handleFetchRequest 方法则是处理消息读取请求的。
我们刚刚说的都是 core 代码包下的重要类文件。在客户端 clients 包下,我推荐你重点阅读 4 个部分的内容。
另外,在阅读源码的时候,不管是 Broker 端还是 Client 端,你最好结合 Java 调试一起来做。通过 Debug 模式下打断点的方式,一步一步地深入了解 Kafka 中各个类的状态以及在内存中的保存信息,这种阅读方式会让你事半功倍。
首先运行虚拟机的zookeeper
接着idea中运行,kafka,create topic, producer,consumer
直接idea打开源码工程后,配置运行的应用设置。
配置Run/Debug Configurations
参数
config/server.properties
参数
--create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
参数
--topic test --broker-list localhost:9092
--bootstrap-server localhost:9092 --from-beginning --topic test
首先运行本地的zookeeper,接着idea中运行,kafka,create topic, producer,consumer