Kafka源码分析1:源码的开发环境搭建 (图解+秒懂+史上最全)

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 :

免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备
免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 经典图书:尼恩Java面试宝典 最新版 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取


Kafka源码分析(史上最全)1:源码的开发环境搭建

背景:

下一个视频版本,从架构师视角,尼恩为大家打造史上最强kafka源码视频

并且,进一步,带大家实现一个超高质量的项目实操:10WQPS超高并发消息队列架构与实操

本系列博客的具体内容,请参见 Java 高并发 发烧友社群:疯狂创客圈

接下来:

  • 首先,开始Kafka源码分析
  • 然后,10WQPS超高并发消息队列架构与实操

开发环境和工具

  • 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

说明:本文会以pdf格式持续更新,更多最新尼恩3高pdf笔记,请从下面的链接获取:语雀 或者 码云

安装 Gradle

要搭建 Kafka 开发环境,你必须要安装好 Gradle,把 Gradle 环境加入到环境变量中。

在这里插入图片描述

同时在 IDEA 中安装可以设置 gradle的位置。

在这里插入图片描述

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>


下载源码:

仓库地址:

https://codeload.github.com/apache/kafka/zip/trunk

码云的地址:

https://gitee.com/apache/kafka.git

码云下载更快。

[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[remote "origin"]
	url = https://gitee.com/apache/kafka.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "trunk"]
	remote = origin
	merge = refs/heads/trunk
[branch "1.0"]
	remote = origin
	merge = refs/heads/1.0
[branch "0.10.1"]
	remote = origin
	merge = refs/heads/0.10.1
[branch "1.1"]
	remote = origin
	merge = refs/heads/1.1
[http]
	sslVerify = false

说明:本文会以pdf格式持续更新,更多最新尼恩3高pdf笔记,请从下面的链接获取:语雀 或者 码云

修改镜像仓库到阿里云

修改里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/'
    }
  }
}

源码编译

下载 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"

还有一大堆的告警信息

在这里插入图片描述

直接忽略

说明:本文会以pdf格式持续更新,更多最新尼恩3高pdf笔记,请从下面的链接获取:语雀 或者 码云

把 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插件地址

到此完成插件安装

说明:本文会以pdf格式持续更新,更多最新尼恩3高pdf笔记,请从下面的链接获取:语雀 或者 码云

idea配置运行kafka

运行虚拟机的zookeeper

首先运行虚拟机的zookeeper

在这里插入图片描述

配置kafka应用参数,修改其中的zk的地址。

config/server.properties

在这里插入图片描述

idea中运行kafka

接着idea中运行,kafka,create topic, producer,consumer

配置kafka的应用application参数

运行core包下的kafka主类

直接idea打开源码工程后,配置运行的应用设置。

配置Run/Debug Configurations

在这里插入图片描述

开启kafka应用

在这里插入图片描述

报错缺少包slf4j-nop:

在这里插入图片描述

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
缺少包slf4j-nop,导入该包。

具体步骤:

1 在dependencies.gradle中加入

slf4jnop: "org.slf4j:slf4j-nop:$versions.slf4j",

在这里插入图片描述

2 在build.gradle中project(':core') 后面加上compile libs.slf4jnop

在这里插入图片描述

编译报错,没有有效错误消息

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':core:Kafka.main()'.

Process 'command 'C:/Program Files/Java/jdk1.8.0_91/bin/java.exe'' finished with non-zero exit value 1

  • 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

BUILD FAILED in 42s
5 actionable tasks: 2 executed, 3 up-to-date
Disconnected from the target VM, address: '127.0.0.1:20494', transport: 'socket'
20:37:10: Task execution finished 'Kafka.main()'.

解决方案:

打开File->Settings->Build,Execution,Deployment->Build Tools->Gradle,将build&Run tests using改成InterlliJ IDEA。

在这里插入图片描述

运行成功,brokder对应的元数据

在这里插入图片描述

create topic(test)

配置执行应用的参数

--create --zookeeper cdh1:2181 --replication-factor 1 --partitions 1 --topic test

在这里插入图片描述

执行结果

在这里插入图片描述

topic对应的元数据

在这里插入图片描述

启动consumer

配置执行参数

--bootstrap-server localhost:9092 --from-beginning --topic test

在这里插入图片描述

启动之后

在这里插入图片描述

producer

配置执行应用的参数

--topic test --broker-list localhost:9092

在这里插入图片描述

启动之后

可以在控制台发送消息

在这里插入图片描述

消费者接受消息

在这里插入图片描述

说明:本文会以pdf格式持续更新,更多最新尼恩3高pdf笔记,请从下面的链接获取:语雀 或者 码云

posted @ 2021-10-04 17:18  疯狂创客圈  阅读(2240)  评论(0编辑  收藏  举报