热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Kafka从成神到升仙系列一】Kafka源码环境搭建

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,Java领域新星创作者。Ǵ
  • 👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,Java领域新星创作者。
  • 📝个人公众号:爱敲代码的小黄(回复 “技术书籍” 可获千本电子书籍)
  • 📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙
  • 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2022计划中:以梦为马,扬帆起航,2022追梦人


文章目录

    • 一、引言
    • 二、前期准备
      • 1. 安装 JDK1.8
      • 2. 安装Zookeeper
      • 3. 安装 Gradle
      • 4. 安装 scala
    • 二、Kafka 源码构建
      • 1. 源码下载
      • 2. 问题解决
      • 3. 编译成功
    • 三、配置kafka
      • 1. 日志的修改
      • 2. 服务端
      • 3. 客户端
        • 3.1 生产者
        • 3.2 消费者
    • 四、启动 Kafka
      • 1. 启动 Zookeeper
      • 2. 启动服务端
      • 3. 启动客户端
        • 3.1 生产者
        • 3.2 消费者
        • 3.3 消息发送



往期推荐

  • 【Kafka从入门到成神系列 一】Kafka基本概述和架构
  • 【Kafka从入门到成神系列 二】Kafka集群参数配置
  • 【Kafka从入门到成神系列 三】Kafka 生产者消息分区及压缩算法
  • 【Kafka从入门到成神系列 四】Kafka 消息丢失及 TCP 管理
  • 【Kafka从入门到成神系列 五】Kafka 幂等性及事务
  • 【Kafka从入门到成神系列 六】Kafka 消费组及重平衡
  • 【Kafka从入门到成神系列 七】Kafka 位移主题
  • 【Kafka从入门到成神系列 八】Kafka 多线程消费者及TCP连接
  • 【Kafka从入门到成神系列 番外篇】kafka的副本同步机制




一、引言

初学一个技术,怎么了解该技术的源码至关重要。

对我而言,最佳的阅读源码的方式,那就是:不求甚解,观其大略

你如果进到庐山里头,二话不说,蹲下头来,弯下腰,就对着某棵树某棵小草猛研究而不是说先把庐山的整体脉络研究清楚了,那么你的学习方法肯定效率巨低而且特别痛苦。

最重要的还是慢慢地打击你的积极性,说我的学习怎么那么不 happy 啊,怎么那么没劲那,因为你的学习方法错了,大体读明白,先拿来用,用着用着,很多道理你就明白了。

先从整体上把关源码,再去扣一些细节问题。

举个简单的例子:

如果你刚接触 HashMap,你刚有兴趣去看其源码,在看 HashMap 的时候,有一个知识:当链表长度达到 8 之后,就变为了红黑树,小于 6 就变成了链表,当然,还和当前的长度有关。

这个时候,如果你去深究红黑树、为什么是 8 不是别的,又去查 泊松分布,最终会慢慢的搞死自己。

所以,正确的做法,我们先把这一部分给略过去,知道这个概念即可,等后面我们把整个庐山看完之后,再回过头抠细节。

当然,本章我们不会讲述一些知识,重点在于 Kafka源码环境的搭建

二、前期准备


本文所有下载文件均可在公众号回复:Kafka源码环境,即可获得所有的下载文件


1. 安装 JDK1.8

这个就不介绍了,既然你能看到这篇文章,想必你一定安装完了 JDK1.8

2. 安装Zookeeper

这里选择的 Zookeeper 版本为 3.4.9

下载地址:https://mirrors.cnnic.cn/apache/zookeeper/

建议安装目录:D:\zookeeper-3.4.9

将在 D:\zookeeper-3.4.9\conf 中把 zoo_sample.cfg 修改为 zoo.cfg 文件,内容做以下修改:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=D:\\zookeeper-3.4.9\\data
dataLogDir=D:\\zookeeper-3.4.9\\log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

最后 cmd 进入 D:\zookeeper-3.4.9\bin 的目录,执行 zkServer.cmd 即可启动 Zookeeper

我们可执行 zkCli.cmd 输入一些命令,进行验证:create /kafka 123

3. 安装 Gradle

这里选择的 Gradle 的版本是 4.10.3

下载地址:https://gradle.org/releases/

建议安装目录:D:\gradle-4.10.3-all\gradle-4.10.3

配置环境变量:

GRADLE_HOME = D:\gradle-4.10.3-all\gradle-4.10.3
path = D:\gradle-4.10.3-all\gradle-4.10.3\bin

**验证:**在 cmd 输入 gradle -v 显示版本号既安装成功

4. 安装 scala

这里选择的 scala 的版本是 2.12.11

下载地址:https://www.scala-lang.org/download/

建议安装目录:D:\scala

配置环境变量:

SCALA_HOME = D:\scala
Path = %SCALA_HOME%\bin

**验证:**在 cmd 输入 scala 显示版本号既安装成功

二、Kafka 源码构建


1. 源码下载

这里选择的 kafka 的版本是 0.10.0.1

下载地址:http://kafka.apache.org/

建议安装目录:D:\kafka-0.10.0.1-src

通过 cmd 请求进入该目录,执行 gradle idea 命令进行构建。

加快速度:

mavenLocal()maven {url "http://maven.aliyun.com/nexus/content/groups/public/"}

2. 问题解决

不出意外的话,应该会报错如下的错误:

[root@bigdata01 kafka-0.10.0.0-src]# gradle idea
Starting a Gradle Daemon (subsequent builds will be faster)
Building project 'core' with Scala version 2.10.6FAILURE: Build failed with an exception.* Where:
Build file 'kafka-0.10.0.1-src/build.gradle' line: 233* What went wrong:
A problem occurred evaluating root project 'kafka-0.10.0.1-src'.
> Failed to apply plugin [class 'org.gradle.api.plugins.scala.ScalaBasePlugin']> No such property: useAnt for class: org.gradle.api.tasks.scala.ScalaCompileOptions* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.BUILD FAILED

简单来说,我们 kafka-0.10.0.1-src/build.gradle 这个文件,缺失了一些东西,需要进行补充。

将下面的信息添加到 kafka-0.10.0.1-src/build.gradle 文件中,即可编译成功

ScalaCompileOptions.metaClass.daemonServer = true
ScalaCompileOptions.metaClass.fork = true
ScalaCompileOptions.metaClass.useAnt = false
ScalaCompileOptions.metaClass.useCompileDaemon = false

3. 编译成功

这里等待的时间可能会稍长,在 10min~90min 不等,等编译完成后,我们就可以使用了。

三、配置kafka


1. 日志的修改

将我们的 log4j.properties 的日志文件配置移动到我们 core/src/main/scala 中的 resources 中。如下图所示:
在这里插入图片描述

2. 服务端

服务端的配置如下:
在这里插入图片描述

3. 客户端

客户端主要包括我们的生产者和消费者

3.1 生产者

生产者的配置如下:
在这里插入图片描述

3.2 消费者

消费者的配置如下:
在这里插入图片描述

四、启动 Kafka


1. 启动 Zookeeper


  • 启动 D:\zookeeper-3.4.9\bin 中的 zkServer.cmd
    在这里插入图片描述
  • 启动 D:\zookeeper-3.4.9\bin 中的 zkCli.cmd建议使用 ls / 来验证当前的 zookeeper 是否成功
    在这里插入图片描述

2. 启动服务端

启动我们刚刚的 Kafka,出现如下证明服务端启动成功。
在这里插入图片描述

3. 启动客户端


3.1 生产者

在这里插入图片描述

3.2 消费者

在这里插入图片描述

3.3 消息发送

当我们在 Producer 中输入 hello world 时,我们的消费端会显示 hello world

  • 生产者
    在这里插入图片描述
  • 消费者
    在这里插入图片描述

推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
author-avatar
锦瑟刻下两段缠绵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有