eclipse工程目录结构_Kafka 2.3.0源码解析之二:源码工程目录结构

本文介绍了Kafka 2.3.0版本的源码工程目录结构及其各部分功能,包括核心模块、客户端、连接器等,并简述了构建工具Gradle的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka 2.3.0源码解析之一:把源码工程跑起来

上一篇我们已经kafka源码运行起来了,本篇跟大家介绍下源码工程目录结构,源码工程根目录下包含了若干文件夹和文件,如下图所示:

52965da63f8521204984a7ef4e106e68.png

Kafka工程目录文件夹和文件

kafka是基于Gradle构建的多模块工程,在build.gradle文件中定义了整个工程和各个模块的相关配置,打开IDEA里面的gradle面板,可以看见工程的模块和模块下面的各种类型的Task:

616e917c4650267a85a505d7ebb58b8a.png

大家可以详细看下build.gradle里面的内容,详细看下各个模块的依赖和相关配置。接下来,将根目录下的各个文件夹给大家做个简单的介绍:

bin目录

Windows和Unix平台下的执行脚本,主要有启动脚本kafka-server-start,创建主题脚本 kafka-topics,发送消息脚本kafka-console-producer,接收消息脚本kafka-console-consumer,大家一开始接触kafka的命令一般都是先从这几个开始。

checkstyle目录

Checkstyle是什么,关于格式化的讨论就不曾中断过,到底什么才是正确的,什么才是错误的,到现在也没有完整的定论。但随着时间发展,渐渐衍生出一套规范出来。没有什么绝对的正确和错误,关键在于规范的定义。最出名的就是google style guide. Checkstyle就是以这种风格开发出的一个自动化插件,来辅助判断代码格式是否满足规范。

该目录下的文件定义了工程代码格式的规范,我们可以在build.gradle中看到相关checkstyle的配置和自动化代码格式化配置:

1646fcc1e783183da9da464b3ec51110.png

checkstyle配置

8a00145180db1dd7c5c52b924cf8130b.png

scala自动化代码格式化配置

config目录

kafka相关的配置文件均存放在该目录,其中server.properties是kafka启动需要直接加载的文件。

docs目录

kafka文档模版html文件

gradle目录

存放gradle的脚本和依赖包定义等相关文件。

tests目录

此目录的内容介绍如何进行Kafka系统集成和性能测试。

vagrant目录

介绍如何在Vagrant虚拟环境中运行kakfa,提供了相关的脚本文件和说明文档。

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。

clients

kafka客户端相关类模块,主要是admin、consumer、producer三部分。

connect

Kafka Connect的代码都定义在该目录下。

Kafka Connect是一种在Kafka和其他系统之间进行可伸缩、可靠的数据流传输的工具。它使快速定义连接器变得简单,可以将大量数据集移入和移出卡夫卡。Kafka Connect可以接收整个数据库,或者将所有应用服务器的指标收集到Kafka主题中,从而使数据以较低的延迟用于流处理。导出作业可以将来自Kafka主题的数据传递到辅助存储和查询系统或批处理系统中进行脱机分析。

core目录

Kafka的核心代码模块,后续我们会详细介绍。

examples目录

kafka comsumer、producrer的使用demo,很简单的例子。

generator目录

kafka 消息类处理模块,主要是根据clients模块下的message json文件生成对应的java类,在build.gradle文件中,可以看到定义了一个任务processMessages:

ce23d9887059d3dbb77d886a748e17e0.png

processMessages Task

jmh-benchmarks目录

kafka代码微基准测试相关类

JMH,即Java Microbenchmark Harness,是专门用于代码微基准测试的工具套件。何谓Micro Benchmark呢?简单的来说就是基于方法层面的基准测试,精度可以达到微秒级。当你定位到热点方法,希望进一步优化方法性能的时候,就可以使用JMH对优化的结果进行量化的分析。

JMH比较典型的应用场景有:

想准确的知道某个方法需要执行多长时间,以及执行时间和输入之间的相关性;

对比接口不同实现在给定条件下的吞吐量,找到最优实现

查看多少百分比的请求在多长时间内完成

log4j-appender目录

A log4j appender that produces log messages to Kafka

就一个类

streams目录

Kafka Streams is a client library for building applications and microservices, where the input and output data are stored in Kafka clusters.

提供一个基于Kafka的流式处理类库,直接提供具体的类给开发者调用,整个应用的运行方式主要由开发者控制,方便使用和调试

Kafka Streams是一个用来构建流处理程序的库,特别是其输入是一个Kafka topic,输出是另一个Kafka topic的程序(或者是调用外部服务,或者是更新数据库,或者其它)。它使得你以一种分布式以及容错的方式来做这件事情。

tools目录

工具类模块

This XML file does not appear to have any style information associated with it. The document tree is shown below. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.linmour</groupId> <artifactId>linmour-ScanOrder</artifactId> <packaging>pom</packaging> <version>${revision}</version> <modules> <module>linmour-common-module</module> <module>linmour-system-module</module> <module>linmour-gateway</module> <module>linmour-product-module</module> <module>linmour-security</module> <module>linmour-order-module</module> <module>linmour-restaurant-module</module> <module>linmour-websocket</module> <module>linmour-dataAnaly-module</module> </modules> <!-- 继承Spring boot工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.9.RELEASE</version> </parent> <properties> <!-- 项目版本 --> <revision>1.2.8.0.1</revision> <!-- 项目源码编译输出的编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 项目编译JDK版本 --> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <!-- 依赖包版本管理 --> <security.version>2.3.9.RELEASE</security.version> <validator.version>6.1.5.Final</validator.version> <spring.boot.version>2.3.9.RELEASE</spring.boot.version> <commons.io.version>2.6</commons.io.version> <commons.codec.version>1.12</commons.codec.version> <lombok.version>1.18.16</lombok.version> <mysql.version>5.1.49</mysql.version> <mybatis.version>3.5.1</mybatis.version> <rediss.version>3.16.8</rediss.version> <mpj.version>1.4.11</mpj.version> <mybatis.spring.version>2.0.1</mybatis.spring.version> <mybatis.plus.version>3.4.1</mybatis.plus.version> <lang3.version>3.5</lang3.version> <pagehelper.version>1.2.3</pagehelper.version> <jwt.version>0.9.1</jwt.version> <fastjson.version>1.2.58</fastjson.version> <fastjson.dataformat.version>2.9.9</fastjson.dataformat.version> <spring.jwt.version>1.0.9.RELEASE</spring.jwt.version> <spring.boot.admin.version>2.1.6</spring.boot.admin.version> <spring.cloud.version>Hoxton.SR8</spring.cloud.version> <curator.version>4.2.0</curator.version> <hanlp.version>portable-1.3.4</hanlp.version> <fastdfs.version>1.26.5</fastdfs.version> <baidu.version>4.11.1</baidu.version> <junit.version>4.12</junit.version> <searchbox.version>6.3.1</searchbox.version> <elasticsearch.version>7.2.0</elasticsearch.version> <ali.core.version>4.1.1</ali.core.version> <ali.green.version>3.4.1</ali.green.version> <kafka.version>2.6.6</kafka.version> <kafka.client.version>2.5.1</kafka.client.version> <reflections.version>0.9.11</reflections.version> <swagger.version>2.9.2</swagger.version> <knife4j.version>2.0.2</knife4j.version> <com.alibaba.cloud>2.2.3.RELEASE</com.alibaba.cloud> <xxl.job.version>2.2.0-SNAPSHOT</xxl.job.version> <captcha-plus.version>1.0.2</captcha-plus.version> <mapstruct.version>1.5.5.Final</mapstruct.version> <jsoup.version>1.15.4</jsoup.version> <lombok.version>1.18.26</lombok.version> <mapstruct.version>1.5.5.Final</mapstruct.version> <hutool.version>5.8.18</hutool.version> <easyexcel.verion>3.3.1</easyexcel.verion> <velocity.version>2.3</velocity.version> <screw.version>1.0.5</screw.version> <fastjson.version>1.2.83</fastjson.version> <guice.version>5.1.0</guice.version> <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version> <commons-net.version>3.8.0</commons-net.version> <jsch.version>0.1.55</jsch.version> <tika-core.version>2.7.0</tika-core.version> <netty-all.version>4.1.90.Final</netty-all.version> <ip2region.version>2.7.0</ip2region.version> <reflections.version>0.10.2</reflections.version> <minio.version>7.1.0</minio.version> <tess4j.version>4.1.1</tess4j.version> <jaxb.version>2.3.0</jaxb.version> <maven-plugin.version>2.7.8</maven-plugin.version> <!-- docker 配置 --> <dockerfil.version>1.4.13</dockerfil.version> </properties> <dependencyManagement> <dependencies> <!-- 子模块 --> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-security</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-system-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-common</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-common-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-order-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-product-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-restaurant-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.linmour</groupId> <artifactId>linmour-dataAnaly-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.1</version> </dependency> <!-- 日志处理包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>${rediss.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${maven-plugin.version}</version> </dependency> <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>${reflections.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除默认的logback日志,使用log4j --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> <version>${spring.boot.version}</version> </dependency> <!-- Apache 工具包包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons.io.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${lang3.version}</version> </dependency> <!-- 加密处理包 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons.codec.version}</version> </dependency> <!-- Mysql 数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <!-- jwt --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jwt.version}</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-cbor</artifactId> <version>${fastjson.dataformat.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>${fastjson.dataformat.version}</version> </dependency> <!-- spring colud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring cloud alibaba --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${com.alibaba.cloud}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>${security.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher --> <version>${mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>${mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>${tess4j.version}</version> </dependency> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>${minio.version}</version> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>${kafka.version}</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>${kafka.client.version}</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> <dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-join-boot-starter</artifactId> <version>${mpj.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>${transmittable-thread-local.version}</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>${jaxb.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>${jaxb.version}</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>src/system.test/resources</directory> <filtering>true</filtering> </testResource> </testResources> <pluginManagement> <plugins> <!-- 构建和推动Docker镜像 --> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>${dockerfil.version}</version> <executions> <execution> <id>default</id> <!-- 用package打包才触发构建镜像 --> <phase>package</phase> <goals> <goal>build</goal> <!-- 推送到仓库 --> <!-- <goal>push</goal> --> </goals> </execution> </executions> <configuration> <contextDirectory>${project.basedir}</contextDirectory> <useMavenSettingsForAuth>true</useMavenSettingsForAuth> <repository>${project.artifactId}</repository> <!-- 推送到仓库 --> <!-- <username>root</username> --> <!-- <password>@Cheng128</password> --> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> <!-- install打包时占位符不替换时可以使用这个插件,也可以用package打包 --> <!-- <plugin> --> <!-- <groupId>org.codehaus.mojo</groupId> --> <!-- <artifactId>flatten-maven-plugin</artifactId> --> <!-- <version>1.5.0</version> --> <!-- <configuration> --> <!-- <!– 避免IDE将 .flattened-pom.xml自动识别为功能模块 –> --> <!-- <flattenedPomFilename>pom-xml-flattened</flattenedPomFilename> --> <!-- <updatePomFile>true</updatePomFile> --> <!-- <flattenMode>resolveCiFriendliesOnly</flattenMode> --> <!-- </configuration> --> <!-- <executions> --> <!-- <execution> --> <!-- <id>flatten</id> --> <!-- <phase>process-resources</phase> --> <!-- <goals> --> <!-- <goal>flatten</goal> --> <!-- </goals> --> <!-- </execution> --> <!-- <execution> --> <!-- <id>flatten-clean</id> --> <!-- <phase>clean</phase> --> <!-- <goals> --> <!-- <goal>clean</goal> --> <!-- </goals> --> <!-- </execution> --> <!-- </executions> --> <!-- </plugin> --> </plugins> </pluginManagement> </build> <repositories> <repository> <id>spring</id> <url>https://maven.aliyun.com/repository/spring</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project> 这个项目我如果想用源码运行怎么做
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值