Kafka源碼分析1:源碼的開發環境搭建 (圖解+秒懂+史上最全)


文章很長,建議收藏起來,慢慢讀! Java 高並發 發燒友社群:瘋狂創客圈 奉上以下珍貴的學習資源:


推薦:入大廠 、做架構、大力提升Java 內功 的 精彩博文

入大廠 、做架構、大力提升Java 內功 必備的精彩博文 2021 秋招漲薪1W + 必備的精彩博文
1:Redis 分布式鎖 (圖解-秒懂-史上最全) 2:Zookeeper 分布式鎖 (圖解-秒懂-史上最全)
3: Redis與MySQL雙寫一致性如何保證? (面試必備) 4: 面試必備:秒殺超賣 解決方案 (史上最全)
5:面試必備之:Reactor模式 6: 10分鍾看懂, Java NIO 底層原理
7:TCP/IP(圖解+秒懂+史上最全) 8:Feign原理 (圖解)
9:DNS圖解(秒懂 + 史上最全 + 高薪必備) 10:CDN圖解(秒懂 + 史上最全 + 高薪必備)
11: 分布式事務( 圖解 + 史上最全 + 吐血推薦 ) 12:seata AT模式實戰(圖解+秒懂+史上最全)
13:seata 源碼解讀(圖解+秒懂+史上最全) 14:seata TCC模式實戰(圖解+秒懂+史上最全)

Java 面試題 30個專題 , 史上最全 , 面試必刷 阿里、京東、美團... 隨意挑、橫着走!!!
1: JVM面試題(史上最強、持續更新、吐血推薦) 2:Java基礎面試題(史上最全、持續更新、吐血推薦
3:架構設計面試題 (史上最全、持續更新、吐血推薦) 4:設計模式面試題 (史上最全、持續更新、吐血推薦)
17、分布式事務面試題 (史上最全、持續更新、吐血推薦) 一致性協議 (史上最全)
29、多線程面試題(史上最全) 30、HR面經,過五關斬六將后,小心陰溝翻船!
9.網絡協議面試題(史上最全、持續更新、吐血推薦) 更多專題, 請參見【 瘋狂創客圈 高並發 總目錄

SpringCloud 精彩博文
nacos 實戰(史上最全) sentinel (史上最全+入門教程)
SpringCloud gateway (史上最全) 更多專題, 請參見【 瘋狂創客圈 高並發 總目錄

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

安裝 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

修改鏡像倉庫到阿里雲

修改里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"

還有一大堆的告警信息

在這里插入圖片描述

直接忽略

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

到此完成插件安裝

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

在這里插入圖片描述

啟動之后

可以在控制台發送消息

在這里插入圖片描述

消費者接受消息

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM