实操 | 10分钟带你轻松掌握 Kafka 源码编译环境搭建,调试无忧!

1934cea02c14bfe5aa3c455882330951.gif

点击卡片“大数据实战演练”,选择“设为星标”或“置顶”

回复“资料”可领取独家整理的学习资料!

d197c222b056b89535fbf3c226d748b3.png

众所周知,要研究 Kafka,阅读 Kafka 源码是必不可少的环节。因此,本文将介绍如何使用 idea 加载 Kafka 源码并编译的具体步骤。由于 Kafka 核心模块是用 Scala 语言开发,用 Gradle 编译和构建的,因此下面先介绍相关环境的安装配置。

说明:

运行环境:windows 10

Kafka 版本:1.1.1

idea 版本:2020.03

一、源码下载

kafka 1.1.1 源码下载地址:

https://github.com/apache/kafka/archive/refs/tags/1.1.1.tar.gz

如果下载缓慢,可使用该网站加速下载:https://shrill-pond-3e81.hunsh.workers.dev/

得到源码之后,最好执行下 git initgit add .git commit "xxx" 命令,这样后续文件的变化,在 git 上都能追溯到。

二、环境配置

1、Gradle

首先确认 Gradle 版本,打开 build.gradle 文件,发现 gradleVersion = "4.8.1"。

2、Scala

然后再确认 Scala 版本,打开 gradle.properties 文件,可以看到 scalaVersion 是 2.11.12 。

三、源码编译

强烈建议先别用 idea 等工具打开项目!!!

1、编译之前,建议先配置 gradle 版本库为阿里源:
maven { url 'https://maven.aliyun.com/repository/public' }

可以先用 Sublime 或 Notepad++ 来编译文件:

6fd5892c7d4f3aa5a509dbe0a3b0c831.png
2、执行 gradle 命令,会生成 gradlew、gradlew.bat、gradle/wrapper 目录。
95977c8a7ad50ddc9bcddaba7e5a741f.png

四、本地运行 kafka

1、执行 gradlew idea 命令。
614cd4501bf0440844a681089b96f4aa.png
2、idea 安装 Scala 插件

14dea272df6aa87f280a1bd3fae02bf8.png

插件安装完,需要重启 idea 才能生效。

3、用 idea 打开项目,并启动
  • 用 idea 打开项目后,多执行几次 “Reload All Gradle Projects” 按钮。

d5bcfc61491c12e02f33093990ca920a.png
  • 将 config 目录下的 log4j.properties 文件拷贝到 core/src/main/resources 目录下。

  • 修改 config/server.properties 文件,修改 log.dirs、zookeeper.connect 配置。

  • 配置 Application 启动类

1e22b774a4264dc78de7fcd85b4634e5.png

启动成功:

8445f86c83f3d0abbb699865285b249c.png

五、命令测试

# 创建topic
.\bin\windows\kafka-topics.bat --create --zookeeper 192.168.62.66:2181/kafka1 --replication-factor 1 --partitions 1 --topic test

# 查看topic列表
.\bin\windows\kafka-topics.bat --list --zookeeper 192.168.62.66:2181/kafka1

六、可能遇到的错误集锦

1、Failed to apply plugin [id 'org.scoverage']
d18da2ae80f1d101d105c6821754880d.png

解决办法:

编辑 build.gradle 文件,将 org.scoverage:gradle-scoverage:2.1.0 修改为 2.5.0

2、有的 jar 包找不到
a4e5037212dc441c4193e7b9b4248e1b.png

解决办法:

C:\Users\xxx\.gradle 目录删掉,重新加载项目,重新生成。

609736959aa596c254a2685cbe5eacb6.png

3、运行时乱码
189b14b2e2e225072fd516a1077e4433.png

如果还不行,可参考:https://cloud.tencent.com/developer/article/1795283

4、Failed to load class "org.slf4j.impl.StaticLoggerBinder".
b838532e2d6551d0c4c545bea1544376.png

解决办法:

在 build.gradle 文件中添加相关依赖(大约在594行):

project(':core') {
  println "Building project 'core' with Scala version ${versions.scala}"

  apply plugin: 'scala'
  apply plugin: "org.scoverage"
  archivesBaseName = "kafka_${versions.baseScala}"

  dependencies {
     ...(省略)
    // 添加以下两个依赖
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-api
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'
  }

解决。

5、错误: 找不到或无法加载主类 kafka.admin.TopicCommand

执行 .\bin\windows\kafka-topics.bat 会报 kafka.admin.TopicCommand 错误。

不知道为什么,执行了一下 core 模块的 gradle build,虽然命令失败了,但是又试了试 .\bin\windows\kafka-topics.bat 发现执行正常了。

七、总结

以上就是构建 Kafka 源码环境的所有步骤了。只有搭建好了 Kafka 的源码编译环境,你才能更方便地 debug 某一功能,梳理其中逻辑。

觉得本文写的不错,欢迎右下角点赞、在看、转发哟~

----------  END  ----------

往期推荐

分享一下我对 ambari 二次开发的一些理解~

Kafka的幂等性是什么意思,如何实现呢?

Kafka精进 | Producer端核心参数及调优建议

悄悄掌握 Kafka 常用命令,再也不用全网搜索了(建议收藏)

解惑 | kafka集群三节点下,挂掉一个节点,为什么消费者消费不到数据了

kafka 如何对 topic 分区 replica leader 进行负载均衡

必会 | 教你如何重新分布kafka分区、增加分区副本数

解惑 | 为什么我根据时间戳获得的offset为空呢?

最后说一句(求关注,别白嫖我)

扫一扫,我们的故事就开始了。

8247653d5ee3bb475833147ed979edc7.png

文章有用,点赞、转发、在看都是一种支持,求三连

另外公众号改变了推送规则,大家看文章不要忘记点击最下方的在看,点赞按钮,这样微信自动识别为常看公众号,否则很可能推送的文章可能淹没在别的文章找不到,谢谢大家。

56b412d2ea92be9871489dae7d20bf8a.png

                   动动小手,让更多需要的人看到~

e878b343e5bef4f0bc7fd9aa484358c8.gif

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

create17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值