性能文章>想看kafka源码,跟我一起做 | kafka源码环境搭建>

想看kafka源码,跟我一起做 | kafka源码环境搭建原创

291123

“全文共计2295字,预计阅读时间7分钟

 

大家好,我是tin,这是我的第22篇原创文章

AD7C02F9-BB61-4AAC-ABB0-A48EDD430A72.png

kafka是一个高吞吐、低延时的消息中间件。采用Java和scala语言编写,它有着非常多的优秀设计。

要想学习讨论kafka的优秀理念,源码阅读必不可少。

今天我们开始搭建kafka环境。

JDK

kafka服务器端代码是用scala语言编写的,但同样会被编译为class文件,运行在JVM上。

JDK的安装非常简单,现在我们用的比较多的也是JDK8吧,有JDK8即可。

下面是JDK的下载地址,下载机型安装:


https://www.oracle.com/java/technologies/downloads/#java8

 

这里我们安装scala的2.3.18版本,分不同的操作系统,自行选择下载:

BA1DCD79-7C3A-44BA-B030-C2139FA94E41.png

地址:https://www.scala-lang.org/download/2.13.8.html

下载完成后进行解压,解压后需进行环境变量配置,如果是linux系统,可以通过如下命令设置:

vim /etc/profile

# 配置scala安装路径及环境变量
SCALA_HOME={scala解压包路径,比如:Users/ericli/small-workshop/workspace/scala/scala-2.13.8}
export SCALA_HOME
export PATH=$PATH:$SCALA_HOME/bin

# 重新加载配置文件,使scala配置生效
source /etc/profile

# 验证scala环境是否生效
scala -version

 

gradle

kafka代码通过gradle管理的,目前gradle的最新release版本是v7.4.2。

6075DB40-BAC3-42D3-AB3C-9236FAA20A98.png

链接地址:https://gradle.org/releases/

下载完成后,同样,进行解压,解压后再设置环境变量配置,比如如果是linux系统,可以通过如下命令设置:

vim /etc/profile

# 配置gradle安装路径及环境变量
GRADLE_HOME={gradle解压包路径,比如:Users/ericli/small-workshop/tools/gradle-7.4.2}
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

# 重新加载配置文件,使gradle配置生效
source /etc/profile

# 验证gradle环境是否生效
gradle -v

 

安装成功后,可以查看gradle的版本信息。

A38DC65E-7825-4355-A621-892092A35377.png

这里补一句,gradle和maven同作为Java项目自动构建工具,gradle似乎更优秀一些(虽然我们很多项目还是用的maven)。

6742DF96-B709-4D65-BC40-2319C8D95064.png

从代码简洁上来说,gradle也是比maven更让人满意。

gradle三行代码搞定的事情:

dependencies {
    compile('org.springframework:spring-core:2.5.6')
}

maven需要七行:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>2.5.6</version>
        </dependency>
</dependencies>

 

kafka源码

安装完JDK、scala、gradle等依赖后,我们就可以正式开始搭建kafka的源码环境了。

1. 拉取源码库

kafka开源项目库:
https://github.com/apache/kafka.git

目前kafka最新版本是3.2,我们下载3.2版本的源码。

 

可以考虑 Fork 下开源库,自己读源码会有一些自己的理解,加一些笔记,Fork出来的自己的仓库,方便自由的提交

 

9D5A380C-EABB-433A-8EE8-4FBF5B288907.png


下载完成后,切到3.2.0版本:

3422B117-DA3C-4B54-A7F8-DB4000AC9123.png

IDEA打开kafka源码包,第一步要做的就是修改build.gradle文件。

因为 gradle支持使用maven依赖,所以我们可以使用阿里云的maven镜像 https://maven.aliyun.com/nexus/content/groups/public/。如下图所示:

EDE078B1-D4CB-4371-B268-642B9AFBE848.png

kafka真的太大了,依赖包也很多,加阿里镜像可以加快拉取速度。

 

2. 安装scala插件

idea并未内置scala插件,所以需要去下载。

打开core包,然后在scala目录下找到Kafka .scala文件,会看到 IDEA 调试 "Plugins supporting *.scala files found",我们点击"install plugins"进行安装。

EC5E774A-EF76-4BD1-A8CD-F90AD7642D44.png

安装完成插件,重启idea即生效。

除此之外,在gradle.properties文件中把scalaVersion设置为本地安装的scala版本:

 

3. 启动kafka broker

Debug 运行 kafka.scala 类,如下图:

42D6B4F4-B242-48E5-B460-20278CF09E98.png

但是,这个时候是启动不起来的,报错如下:

CACAB203-5F96-4D1A-B43E-55B32ABAF22E.png

我们需要修改 Kafka 启动类,设置配置文件。操作如下图所示:

C4637BDD-7253-4ECC-910C-322171B33869.png

再次启动main函数:

4C2E1B1C-D0B0-4F19-981A-4383F8BB734D.png

到此,kafka启动成功!

 

结语

我是tin,一个在努力让自己变得更优秀的普通工程师。自己阅历有限、学识浅薄,如有发现文章不妥之处,非常欢迎加我提出,我一定细心推敲并加以修改。

看到这里请安排个“三连”(分享、点赞、在看)再走吧,坚持创作不容易,你的正反馈是我坚持输出的最强大动力,谢谢!

最后别忘了关注我哦!⏬⏬⏬

分类:标签:
请先登录,查看2条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

字符串字面量长度是有限制的
前言 偶然在一次单元测试中写了一个非常长的字符串字面量。 正文 在一次单元测试中,我写了一个很长的字符串字面量,大概10万个字符左右,编译时,编译器给出了异常告警 `java: constant
多次字符串相加一定要用StringBuilder而不用-吗?
今天在写一个读取Java class File并进行分析的Demo时,偶然发现了下面这个场景(基于oracle jdk 1.8.0_144): ``` package test; public c
如何通过反射获得方法的真实参数名(以及扩展研究)
前段时间,在做一个小的工程时,遇到了需要通过反射获得方法真实参数名的场景,在这里我遇到了一些小小的问题,后来在部门老大的指导下,我解决了这个问题。通过解决这个问题,附带着我了解到了很多新的知识,我觉得
高吞吐、低延迟 Java 应用的 GC 优化实践
本篇原文作者是 LinkedIn 的 Swapnil Ghike,这篇文章讲述了 LinkedIn 的 Feed 产品的 GC 优化过程,虽然文章写作于 April 8, 2014,但其中的很多内容和
「每日五分钟,玩转 JVM」:久识你名,初居我心
聊聊 JVMJVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。JVM可以说和我们是老朋友了
据说99.99%的人都会答错的类加载的问题
概述首先还是把问题抛给大家,这个问题也是我厂同学在做一个性能分析产品的时候碰到的一个问题。 同一个类加载器对象是否可以加载同一个类文件多次并且得到多个Class对象而都可以被java层使用吗请仔细注意
Java多线程——并发测试
编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。那么如何在测试中,尽可能的暴露出这些问
Java多线程知识小抄集(一)
本文主要整理笔者遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。 1.interr