关注小程序 找一找教程网-随时随地学编程

消息队列MQ

Kafka源码开发环境搭建

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 那个时间

img

img

打开下面的连接:

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 个部分的内容。

  1. org.apache.kafka.common.record 包。这个包下面是各种 Kafka 消息实体类,比如用于在内存中传输的 MemoryRecords 类以及用于在磁盘上保存的 FileRecords 类。
  2. org.apache.kafka.common.network 包。这个包不用全看,你重点关注下 Selector、KafkaChannel 就好了,尤其是前者,它们是实现 Client 和 Broker 之间网络传输的重要机制。如果你完全搞懂了这个包下的 Java 代码,Kafka 的很多网络异常问题也就迎刃而解了。
  3. org.apache.kafka.clients.producer 包。顾名思义,它是 Producer 的代码实现包,里面的 Java 类很多,你可以重点看看 KafkaProducer、Sender 和 RecordAccumulator 这几个类。
  4. 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

在这里插入图片描述

  1. consumer
    参数
--bootstrap-server localhost:9092 --from-beginning --topic test

在这里插入图片描述

运行

首先运行本地的zookeeper,接着idea中运行,kafka,create topic, producer,consumer

  • kafka
  • create topic
    在这里插入图片描述
  • producer
    在这里插入图片描述

在这里插入图片描述

  • consumer
    在这里插入图片描述

在这里插入图片描述