关键词:
文章很长,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈 奉上以下珍贵的学习资源:
-
免费赠送 经典图书:《Java高并发核心编程(卷1)》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《Java高并发核心编程(卷2)》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《Netty Zookeeper Redis 高并发实战》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 经典图书:《SpringCloud Nginx高并发核心编程》 面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
-
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取
推荐:入大厂 、做架构、大力提升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 那个时间
打开下面的连接:
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
启动之后
可以在控制台发送消息
消费者接受消息
kafka源码分析9:controller控制器的原理(图解+秒懂+史上最全)(代码片段)
文章很长,建议收藏起来,慢慢读!Java高并发发烧友社群:疯狂创客圈奉上以下珍贵的学习资源:免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免... 查看详情
kafka源码分析11:partitionstatemachine分区状态机(图解+秒懂+史上最全)(代码片段)
文章很长,建议收藏起来,慢慢读!Java高并发发烧友社群:疯狂创客圈奉上以下珍贵的学习资源:免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免... 查看详情
kafka源码分析10:副本状态机replicastatemachine详解(图解+秒懂+史上最全)(代码片段)
文章很长,建议收藏起来,慢慢读!Java高并发发烧友社群:疯狂创客圈奉上以下珍贵的学习资源:免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免... 查看详情
史上最全的jfinal源码分析(不间断更新)
打算开始写这么一个系列,希望大家喜欢,学习本来就是一个查漏补缺的过程,希望大家能提出建议。本篇文章是整个目录的向导,希望大家喜欢。本文将以包的形式跟大家做向导。HandlerHandlerFactory.javaHandler.java CoreAction... 查看详情
阅读源码时:idea中如何使用todo标记活动模板(史上最全)(代码片段)
...ne并且,尼恩要带大家穿透式、起底式的学习caffeine的源码和架构,caffeine的源码特别复杂,所以要用到下面的技巧1:使用todo标记快速梳理和定位核心流程在日常开发中 查看详情
史上最全的mysql安装指南(各种踩坑,疑难杂症)(代码片段)
...初始化2.2.8启动MySQL2.2.9登陆MySQL2.2.10修改密码2.3Linxu环境源码安装MySQL2.3.1Mysql源码下载2.3.2yum安装依赖包2.3.3系统包升级2.3.4安装及配置三、Windows环境安装各个版本MySQL3.1Windows环境MSI图形安装MySQL3.1.1MySQLMSI包下载3.1.2安装MySQL3.1.3客... 查看详情
我凭借这份pdf的复习思路,深入分析
Kafka源码篇——Kafka快速入门1.1Kafka简介1.2以Kafka为中心的解决方案1.3Kafka核心概念1.4搭建Kafka源码环境Kafka源码篇——生产者2.1KafkaProducer使用示例2.2KafkaProducer分析2.3RecordAccumulator分析2.4Sender分析Kafka源码篇——消费者3.1KafkaConsumer使... 查看详情
windows下intellijidea搭建kafka源码环境
...fka核心原理的资料,网上有很多,但是如果不自己研究其源码,永远是知其然而不知所以然。下面就来演示如何在windows环境下来编译kafka源码,并通过IntelliJIDEA开发工具搭建kafka的源码环境,以方便在本地通过debug调试来研究kafka... 查看详情
caffeine源码架构原理(史上最全,10w字超级长文)(代码片段)
文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+... 查看详情
idea下kafka源码阅读编译环境搭建
Kafka源码编译阅读环境搭建开发环境:OracleJava1.7.0_25+Idea+Scala2.10.5+Gradle2.1+Kafka0.9.0.1一、Gradle安装配置Kafka代码自0.8.x之后就使用Gradle来进行编译和构建了,因此首先需要安装Gradle。Gradle集成并吸收了Maven主要优点的同时还克服了Mav... 查看详情
kafka2.1.0的源码环境搭建(代码片段)
Kafka2.1.0的源码环境搭建提前准备下载kafka源码http://kafka.apache.org/downloads我这里使用的是kafka2.1.0版本的下载完之后,解压即可安装jdkjdk1.8oracle官网下载即可安装编译工具gradle5.5(我最开始使用别的版本报错了,识别不了依赖)https://gradl... 查看详情
受益匪浅!docker打包镜像到本地
Kafka源码篇——Kafka快速入门1.1Kafka简介1.2以Kafka为中心的解决方案1.3Kafka核心概念1.4搭建Kafka源码环境Kafka源码篇——生产者2.1KafkaProducer使用示例2.2KafkaProducer分析2.3RecordAccumulator分析2.4Sender分析Kafka源码篇——消费者3.1KafkaConsumer使... 查看详情
想自学java的速来!java研究所改名
Kafka源码篇——Kafka快速入门1.1Kafka简介1.2以Kafka为中心的解决方案1.3Kafka核心概念1.4搭建Kafka源码环境Kafka源码篇——生产者2.1KafkaProducer使用示例2.2KafkaProducer分析2.3RecordAccumulator分析2.4Sender分析Kafka源码篇——消费者3.1KafkaConsumer使... 查看详情
如何分析springboot源码模块及结构?--springboot源码
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE1前言本篇接如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一)。前面搭建好了自己本地的SpringBoot源码调试环境后,此时我们不要急着下手进入到具体的源码调试细节中,刚... 查看详情
vue前端开发团队风格指南(史上最全)(代码片段)
...的依赖包|-public//静态页面目录|-index.html//项目入口|-src//源码目录|-api//http请求目录|-assets//静态资源目录,这里的资源会被wabpack构建|-icon//i 查看详情
kafka源码环境搭建
我搭建的是0.10.0.1版本1、需要准备的又jdk1.8,scala2.1,gradle-3.1(这个下的好慢)、zookeeper。2、ide推荐idea,eclipse的scala插件好多坑。3、scala和gradle配个home和path就行了,配完查下版本好成功就好了,scala安装失败可能是jdk... 查看详情
kafka快速入门——rdkafka源码分析(代码片段)
Kafka快速入门(十一)——RdKafka源码分析一、RdKafkaC源码分析1、KafkaOP队列RdKafka将与KafkaBroke的交互、内部实现的操作都封装成Operator结构,然后放入OP处理队列里统一处理。KafkaOP队列是线程间通信的管道。RdKafka队列定义在rdkafka_q... 查看详情
kafka3.0源码笔记-kafka服务端的启动与请求处理源码分析(代码片段)
文章目录前言源码分析1.Kafka服务端的启动流程2.Kafka服务端新建连接的处理3.Kafka服务端请求处理流程前言在Kafka3.0源码笔记(1)-Kafka服务端的网络通信架构中笔者介绍了Kafka3.0版本的组件构成,其实由此也可以将本文内容分为三... 查看详情