在Windows环境IDEA下Kafka源码编译

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows环境IDEA下Kafka源码编译相关的知识,希望对你有一定的参考价值。

Kafka 1.1版本在Windows环境IDEA下的源码编译

本文帮助大家 在Windows环境下 进行Kafka源码的编译和单机模式的运行,方便运行调试,源码阅读和功能学习。

一、确认所需软件版本

  1. 可以通过查询Kafka文档,确定java version。
  2. 官方仓库地址,进入仓库选择对应的分支,打开文件gradle.properties确认scala版本scalaVersion=2.11.12。打开文件gradle/dependencies.gradle,确认版本zookeeper: "3.4.10",gradle: "4.8.1"

二、安装软件

1. 安装JDK 1.8

下载地址Oracle版 https://www.oracle.com/java/technologies/javase-downloads.html

安装详细 无

2. 安装Gradle 4.8

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

安装详细 无

为了解决中央仓库的网络问题。建议进行以下配置,在gradle解压后,找到文件夹init.d,在里面新建文件init.gradle,文件中添加以下内容。

allprojects{
 repositories {
     maven{ url 'https://maven.aliyun.com/repository/google'}
     maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'}
     maven{ url 'https://maven.aliyun.com/repository/public'}
     maven{ url 'https://maven.aliyun.com/repository/jcenter'}
     
 
     def REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
     all {
         ArtifactRepository repo ->
 if (repo instanceof MavenArtifactRepository) {
             def url = repo.url.toString()
             if (url.startsWith('https://artifacts.elastic.co/maven')
             || url.startsWith('https://repo1.maven.org/maven2') 
             || url.startsWith('https://repo.maven.org/maven2') 
             || url.startsWith('https://jcenter.bintray.com/')
             || url.startsWith('https://repo.maven.apache.org/maven2')) {
                 project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                 remove repo
             }
         }
     }
     maven {
         url REPOSITORY_URL
     }
 }
}

此方式没有采用本地的maven仓库。如果有需要,可以自行配置。

3. 安装Scala 2.11.12

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

安装详细 无

4. 安装Zookeeper单机模式 3.4.9

下载地址 https://archive.apache.org/dist/zookeeper/

安装详细 无

在Zookeeper安装包解压后,找到conf文件夹下,新增zoo.cfg文件,文件增加配置,其中dataDirdataLogDir可以自行调整。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=E://tmp//zookeeper//data//1
dataLogDir=E://tmp//zookeeper//datalog//1
clientPort=2181

5. IDEA安装Scala插件

推荐采用离线安装方式

下载地址 https://plugins.jetbrains.com/plugin/1347-scala/versions

安装详细 无

三、源码编译

利用IDEA打开源码文件夹,默认会进行编译,此时取消编译,对IDEA进行配置后重新编译。

1. 配置IDEA

  1. 配置JDK
     配置JDK

  2. 指定Gradle版本 指定Gradle版本
    图中gradle user homeUser gradle from 按照自己目录修改。

  3. 指定scala
    指定scala

2. 编译

cancel
编译成功

此时编译成功,如果只需要阅读代码,到此时,以及可以正常的使用IDEA看代码了。

四、单机模式启动

1. 启动ZK

直接运行zk解压后的bin文件夹下的zkServer.cmd在这里插入图片描述

2. 启动kafka

  1. 修改kafka配置文件config/server.propertie除了以下修改,其他采用默认。

    listeners=PLAINTEXT://127.0.0.1:9092
    advertised.listeners=PLAINTEXT://127.0.0.1:9092
    zookeeper.connect=localhost:2181/kafka
    
  2. 配置启动application在这里插入图片描述
    在program argument中填写config/server.properties

  3. 启动出现 问题一,见文章目录导航

  4. 启动出现 问题二,见文章目录导航

  5. 最后启动成功在这里插入图片描述

3. 验证是否可以成功服务

  1. 创建topic

    --zookeeper localhost:2181/kafka --create --topic test20210610001 --replication-factor 1 --partitions 1
    

    在这里插入图片描述
    在这里插入图片描述
    此时创建了一个名为test20210610001的topic且分区数1 副本数1。

  2. 消费

    --bootstrap-server 127.0.0.1:9092 --topic test20210610001
    

    在这里插入图片描述
    此时开启了一个消费端,消费test20100610001这个topic。

  3. 生产

    --broker-list 127.0.0.1:9092 --topic test20210610001
    

    在这里插入图片描述
    在这里插入图片描述
    此时创建了一个生产者,将消息写入test20210610001这个topic。

  4. 结果
    在这里插入图片描述
    查看消费者客户端,发现可以正常消费。

五、问题

问题一

> Task :core:Kafka.main() FAILED
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

说明core模块缺少slf4jjar,解决方案不唯一,本人采用以下方式

在project(’:core’) 下的 dependencies 中增加

    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'

问题二

> Task :core:Kafka.main() FAILED
log4j:WARN No appenders could be found for logger (kafka.utils.Log4jControllerRegistration$).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

说明core模块缺少log4j.prperties,解决方案不唯一,本人采用以下方式

在core模块下main新建 resource,将config文件夹下的log4j.prperties拷贝进来即可。
在这里插入图片描述


专栏导航

Kafka专栏

以上是关于在Windows环境IDEA下Kafka源码编译的主要内容,如果未能解决你的问题,请参考以下文章

Idea下Kafka源码阅读编译环境搭建

Windows环境IDEA下Ranger1.2.0源码编译

Kafka 0.10.1版本源码 Idea编译

idea 编译 kafka 源码

kafka-1.1.0 源码环境搭建

windows下kafka源码阅读环境搭建