Kafka 核心源码解读
胡夕
Apache Kafka Committer,老虎证券技术总监
19216 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
结束语 (1讲)
Kafka 核心源码解读
15
15
1.0x
00:00/00:00
登录|注册

导读 | 构建Kafka工程和源码阅读环境、Scala语言热身

你好,我是胡夕。
从今天开始,我们就要正式走入 Kafka 源码的世界了。既然咱们这个课程是教你阅读 Kafka 源码的,那么,你首先就得掌握如何在自己的电脑上搭建 Kafka 的源码环境,甚至是知道怎么对它们进行调试。在这节课,我展示了很多实操步骤,建议你都跟着操作一遍,否则很难会有特别深刻的认识。
话不多说,现在,我们就先来搭建源码环境吧。

环境准备

在阅读 Kafka 源码之前,我们要先做一些必要的准备工作。这涉及到一些工具软件的安装,比如 Java、Gradle、Scala、IDE、Git,等等。
如果你是在 Linux 或 Mac 系统下搭建环境,你需要安装 Java、IDE 和 Git;如果你使用的是 Windows,那么你需要全部安装它们。
咱们这个课程统一使用下面的版本进行源码讲解。
Oracle Java 8:我们使用的是 Oracle 的 JDK 及 Hotspot JVM。如果你青睐于其他厂商或开源的 Java 版本(比如 OpenJDK),你可以选择安装不同厂商的 JVM 版本。
Gradle 6.3:我在这门课里带你阅读的 Kafka 源码是社区的 Trunk 分支。Trunk 分支目前演进到了 2.5 版本,已经支持 Gradle 6.x 版本。你最好安装 Gradle 6.3 或更高版本。
Scala 2.13:社区 Trunk 分支编译当前支持两个 Scala 版本,分别是 2.12 和 2.13。默认使用 2.13 进行编译,因此我推荐你安装 Scala 2.13 版本。
IDEA + Scala 插件:这门课使用 IDEA 作为 IDE 来阅读和配置源码。我对 Eclipse 充满敬意,只是我个人比较习惯使用 IDEA。另外,你需要为 IDEA 安装 Scala 插件,这样可以方便你阅读 Scala 源码。
Git:安装 Git 主要是为了管理 Kafka 源码版本。如果你要成为一名社区代码贡献者,Git 管理工具是必不可少的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何构建Kafka的源码环境以及对其进行调试的步骤。作者首先介绍了在阅读Kafka源码之前需要做的准备工作,包括安装Java、Gradle、Scala、IDE和Git等工具软件。然后详细介绍了在不同操作系统下搭建环境的步骤,并给出了相应的命令和注意事项。接着,作者讲解了如何构建Kafka工程,包括下载Kafka源代码、执行构建命令以及常用的构建命令。最后,作者介绍了Kafka工程的各个目录以及文件,并给出了一些常用的构建命令,帮助读者快速了解Kafka源码的结构和构建方法。另外,文章还介绍了Scala语言的语法特点,并给出了一些真实的Kafka源码片段来帮助读者热身。整篇文章内容详实,适合想要深入了解Kafka源码的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心源码解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(91)

  • 最新
  • 精选
  • 胡夕
    置顶
    你好,我是胡夕。 我最近看到了一些在搭建环境时经常遇到的问题,根据这些问题,我丰富了一下这节课的部分内容,并且针对可能会遇到的一些异常,补充了解决方案,希望可以解决你的问题。如果还有其他问题,欢迎留言,我会尽快给你解答~
    2020-04-26
    4
    12
  • 小文同学
    我自己在拉取 github kafka 项目的时候遇到超时的问题。通过 码云 做中介完成了快速拉取,步骤写在了博客里了。 https://juejin.im/post/5e954374e51d4546f03d9a27

    作者回复: 厉害!很棒的总结~

    2020-04-15
    2
    16
  • 高舒扬
    老师,您好。之前也看过很多项目的源码,一直比较困惑的怎么构建自己的代码阅读笔记系统。总感觉读懂了,但不能很好的把读代码的结果记录下来。不知道老师在这方面有什么好的建议吗?

    作者回复: 我的一个建议是:不要认为能把每行代码加上注释就表示自己已经懂了。明白源码的2个标志是:1. 能够自行调试源码;2. 能够在源码上独立编写高阶功能。

    2020-04-16
    13
  • 小虞仔
    该脚本有一行代码: exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleProducer "$@" 可以看到,调用了kafka-run-class.sh,看脚本的名字,应该就是用来执行kafka某个类的,并且传入了kafka.tools.ConsoleProducer这个参数 所以,对应的Java类是kafka.tools.ConsoleProducer

    作者回复: Bingo!

    2020-04-13
    3
    9
  • 灰机
    胡老师您好, 我看您是mac运行的kafka,方便配置上您的gradle 版本 jdk版本 scala版本么? 我在用mac执行kafka 的时候 发现Execution failed for task ':core:Kafka.main()'. > Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 换了很多个版本都可以 windows已经成功执行,但是mac就是死活无法执行 。

    作者回复: 我的环境上,jdk版本是build 1.8.0_181-b13,Scala版本是2.12.11,Kafka gradle wrapper用的Gradle版本是5.6.2

    2020-04-17
    5
    4
  • Geek_58afe9
    是看master分支吗?

    作者回复: 嗯嗯,我们这次选用trunk分支。Kafka社区里面主干分支叫trunk

    2020-04-14
    2
    4
  • 懂码哥(GerryWen)
    2020-06-28 拉取trunk代码,gradle版本号6.5.0 Scala版本号2.13.3 版本必须匹配一致,不然 ./gradlew build 会报错。 最新推荐 ./gradlew jar

    作者回复: 强

    2020-06-28
    2
    3
  • Geek_904551
    很困惑 为什么不拉取某一个固定版本的代码,而是去拉trunk,trunk随时更新,后面的人看到的代码和你讲解的代码到时候出入又会很大。看了一下本文也没有标识到底用的哪个kafka版本。还望作者能给出到底是基于哪个kafka版本进行的分析!我觉得这点很重要

    作者回复: 嗯嗯,很好的建议。使用trunk的初衷是在短短出课程的这段时间,trunk也不太可能有太大的修改。让大家使用trunk就会有每天更新的感觉,有真实参与到社区的感觉。这点比弄懂源码本身要重要得多

    2021-06-10
    2
    2
  • 珍妮•玛仕多
    胡老师你好,我build中只有9个test用例build失败,在启动kafka.main时报错如下 2020-11-09T11:42:21.964+0800 [ERROR] [system.err] server.properties file 2020-11-09T11:42:21.964+0800 [ERROR] [system.err] --version Print version information and exit. 2020-11-09T11:42:21.998+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 2020-11-09T11:42:21.998+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception. 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong: 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task ':core:Kafka.main()'. 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Process 'command 'D:/software/java/jdk/bin/java.exe'' finished with non-zero exit value 1 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try: 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run with --stacktrace option to get the stack trace. Run with --scan to get full insights. 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Get more help at https://help.gradle.org 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] 2020-11-09T11:42:21.999+0800 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] BUILD FAILED in 2s 11:42:22: Task execution finished 'Kafka.main() --debug'.

    作者回复: 这是因为不加参数启动Kafka,返回值不是0,IDE视为有问题。其实已经打印出了Kafka的帮助提示信息: “Print version information and exit.”

    2020-11-09
    2
    1
  • 懂码哥(GerryWen)
    编译./gradlew jar报错 单独编译./gradlew srcJar 可以通过 编译 ./gradlew docsJar 文档报错。 gerrydeMBP:kafka gerry$ ./gradlew jar Starting a Gradle Daemon (subsequent builds will be faster) <-------------> 0% CONFIGURING [4s] > Configure project : Building project 'core' with Scala version 2.13.3 Building project 'streams-scala' with Scala version 2.13.3 <-------------> 4% EXECUTING [12s] > Task :core:compileJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':core:compileJava'. > Could not resolve all files for configuration ':core:compileClasspath'. > Could not find scala-library-2.13.3.jar (org.scala-lang:scala-library:2.13.3). Searched in the following locations: http://maven.aliyun.com/nexus/content/repositories/jcenter/org/scala-lang/scala-library/2.13.3/scala-library-2.13.3.jar * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings BUILD FAILED in 17s 9 actionable tasks: 6 executed, 3 up-to-date

    作者回复: 看样子是修改了maven仓库地址。不过似乎依然是无法获取Scala 2.13

    2020-06-29
    3
    1
收起评论
显示
设置
留言
91
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部