Apache Kafka 是一个开源分布式事件流平台,数千家公司将其用于高性能数据管道、流分析、数据集成和关键任务应用程序。
您需要安装 Java。
我们使用 17 和 24 版本构建和测试 Apache Kafka。javac 中的 release
参数对于客户端和流模块设置为 11
,其余模块设置为 17
,以确保与它们各自的最低 Java 版本兼容。
同样,scalac 中的 release
参数对于流模块设置为 11
,其余模块设置为 17
。
Scala 2.13 是 Apache Kafka 唯一支持的版本。
./gradlew jar
请按照 https://kafka.apache.org/quickstart 中的说明操作
./gradlew srcJar
./gradlew aggregatedJavadoc
./gradlew javadoc
./gradlew javadocJar # 为每个模块构建 javadoc jar 包
./gradlew scaladoc
./gradlew scaladocJar # 为每个模块构建 scaladoc jar 包
./gradlew docsJar # 为每个模块构建 javadoc 和 scaladoc jar 包(如果适用)
./gradlew test # 运行单元测试和集成测试
./gradlew unitTest
./gradlew integrationTest
./gradlew test -Pkafka.test.run.flaky=true # 运行标记为不稳定的测试
./gradlew test --rerun-tasks
./gradlew unitTest --rerun-tasks
./gradlew integrationTest --rerun-tasks
./gradlew clients:test --tests RequestResponseTest
./gradlew streams:integration-tests:test --tests RestoreIntegrationTest
N=500; I=0; while [ $I -lt $N ] && ./gradlew clients:test --tests RequestResponseTest --rerun --fail-fast; do (( I=$I+1 )); echo "Completed run: $I"; sleep 1;done
./gradlew core:test --tests kafka.api.ProducerFailureHandlingTest.testCannotSendToInternalTopic
./gradlew clients:test --tests org.apache.kafka.clients.MetadataTest.testTimeToNextUpdate
./gradlew streams:integration-tests:test --tests org.apache.kafka.streams.integration.RestoreIntegrationTest.shouldRestoreNullRecord
默认情况下,测试时只会输出少量日志。您可以通过修改模块 src/test/resources
目录中的 log4j2.yaml
文件来调整输出数量。
例如,如果您想查看更多客户端项目测试的日志,可以将 clients/src/test/resources/log4j2.yaml
中的 该行 修改为 level: INFO
,然后运行:
./gradlew cleanTest clients:test --tests NetworkClientTest
您应该会在 clients/build/test-results/test
目录下的文件中看到 INFO
级别的日志。
默认情况下,重试次数是禁用的,但您可以设置 maxTestRetryFailures 和 maxTestRetries 来启用重试次数。
以下示例声明了 -PmaxTestRetries=1 和 -PmaxTestRetryFailures=3,以使失败的测试可以重试一次,总重试次数限制为 3 次。
./gradlew test -PmaxTestRetries=1 -PmaxTestRetryFailures=3
有关更多详细信息,请参阅 Test Retry Gradle 插件 和 build.yml。
生成整个项目的覆盖率报告:
./gradlew reportCoverage -PenableTestCoverage=true -Dorg.gradle.parallel=false
生成单个模块的覆盖率报告,例如:
./gradlew clients:reportCoverage -PenableTestCoverage=true -Dorg.gradle.parallel=false
./gradlew clean releaseTarGz
发布文件位于 ./core/build/distributions/
目录下。
有时,只需在分支切换时重建 RPC 自动生成的消息数据,因为它们
可能会因代码更改而失败。您只需运行以下命令:
./gradlew processMessages processTestMessages
有关 Apache Kafka 消息协议的详细信息,请参阅 Apache Kafka 消息定义。
使用编译后的文件:
KAFKA_CLUSTER_ID="$(./bin/kafka-storage.sh random-uuid)"
./bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
./bin/kafka-server-start.sh config/server.properties
使用 Docker 镜像:
docker run -p 9092:9092 apache/kafka:latest
详细信息请参阅 docker/README.md。
./gradlew clean
这适用于 core
、examples
和 clients
./gradlew core:jar
./gradlew core:test
Streams 有多个子项目,但您可以运行所有测试:
./gradlew :streams:testAll
./gradlew tasks
注意:开发 Kafka 时,请确保使用 JDK17。
IntelliJ 原生支持 Gradle,它会自动检查每个模块的 Java 语法和兼容性,即使
“结构 > 项目设置 > 模块”中显示的 Java 版本可能不正确。
在 Eclipse 中运行:
./gradlew eclipse
“eclipse”任务已配置为使用“${project_dir}/build_eclipse
”作为 Eclipse 的构建目录。Eclipse 的默认构建目录(${project_dir}/bin
)与 Kafka 的脚本目录冲突,因此我们不使用 Gradle 的构建目录,以避免此配置带来的已知问题。
对于 Streams 原型项目,无法使用 Gradle 上传到 Maven;而是需要在 Quickstart 文件夹中调用“mvn deploy”命令:
cd streams/quickstart
mvn deploy
请注意,要使此功能正常工作,您应该创建/更新用户 Maven 设置(通常为“${USER_HOME}/.m2/settings.xml”)以分配以下变量
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
...
<servers>
...
<server>
<id>apache.snapshots.https</id>
<username>${maven_username}</username>
<password>${maven_password}</password>
</server>
<server>
<id>apache.releases.https</id>
<username>${maven_username}</username>
<password>${maven_password}</password>
</server>
...
</servers>
...
./gradlew -PskipSigning=true publishToMavenLocal
./gradlew -PskipSigning=true :streams:publishToMavenLocal
./gradlew testJar
我们定期运行两个代码质量分析工具:spotbugs 和 checkstyle。
Checkstyle 在 Kafka 中强制执行一致的编码风格。
您可以使用以下命令运行 checkstyle:
./gradlew checkstyleMain checkstyleTest spotlessCheck
Checkstyle 警告信息位于子项目构建目录中的 reports/checkstyle/reports/main.html
和 reports/checkstyle/reports/test.html
文件。
这些警告信息也会打印到控制台。如果 Checkstyle 失败,构建将失败。
为了进行实验(或回归测试),请添加 -PcheckstyleVersion=X.y.z
开关(以覆盖项目定义的 Checkstyle 版本)。
导入顺序是静态检查的一部分。请在提交拉取请求之前调用 spotlessApply
来优化 Java 代码的导入。
./gradlew spotlessApply
Spotbugs 使用静态分析来查找代码中的错误。
您可以使用以下命令运行 spotbugs:
./gradlew spotbugsMain spotbugsTest -x test
Spotbugs 警告将在子项目构建目录中的 reports/spotbugs/main.html
和 reports/spotbugs/test.html
文件中找到。
使用 -PxmlSpotBugsReport=true
可生成 XML 报告而不是 HTML 报告。
我们使用 JMH 编写微基准测试,以便在 JVM 中生成可靠的结果。
有关如何运行微基准测试的详细信息,请参阅 jmh-benchmarks/README.md。
Gradle 依赖项调试文档 提到使用 dependencies
或 dependencyInsight
任务来调试根项目或各个子项目的依赖项。
或者,使用 allDeps
或 allDepInsight
任务递归迭代所有子项目:
./gradlew allDeps
./gradlew allDepInsight --configuration runtimeClasspath --dependency com.fasterxml.jackson.core:jackson-databind
这些命令使用与内置变量相同的参数。
./gradlew dependencyUpdates
以下选项应使用 -P
开关设置,例如 ./gradlew -PmaxParallelForks=1 test
。
commitId
:将构建提交 ID 设置为 .git/HEAD,如果已添加用于构建的本地提交,则可能不正确。mavenUrl
:设置 Maven 部署仓库的 URL(可以使用 file://path/to/repo
指向本地仓库)。maxParallelForks
:并行启动的最大测试进程数。默认为 JVM 可用的处理器数量。maxScalacThreads
:scalac 后端的最大工作线程数。默认为 8
和 JVM 可用处理器数量中的最小值。ignoreFailures
:忽略来自 junit 的测试失败。showStandardStreams
:在控制台上显示测试 JVM 的标准输出和标准错误。skipSigning
:跳过签名。testLoggingEvents
:要记录的单元测试事件,以逗号分隔。例如 ./gradlew -PtestLoggingEvents=started,passed,skipped,failed test
。xmlSpotBugsReport
:启用 XML 报告以查找错误。这也会禁用 HTML 报告,因为一次只能启用一个。maxTestRetries
:失败测试用例的最大重试次数。maxTestRetryFailures
:禁用后续测试重试之前的最大测试失败次数。enableTestCoverage
:启用测试覆盖率插件和任务,包括跟踪所述覆盖率所需类的字节码增强。keepAliveMode
:配置 Gradle 编译守护进程的保持活动模式 - 重用可缩短启动时间。值应为daemon
或 session
(默认值为 daemon
)。daemon
使守护进程保持活动状态,直到它被明确停止,而session
使其保持活动状态,直到构建会话结束。目前,这仅影响 Scala 编译器,请参阅scalaOptimizerMode
:配置 Scala 编译器的优化行为,其值应为 none
、method
、inline-kafka
或inline-scala
(默认值为 inline-kafka
)。none
是 Scala 编译器的默认值,它仅会消除无法访问的代码。method
还inline-kafka
添加了 kafka 包中方法的内联。最后,inline-scala
还Option.exists
这样的方法的 lambda 分配)。inline-scala
仅在编译时和运行时 Scala 库版本相同的情况下才是安全的。由于我们无法保证在所有情况下都能启用此功能(例如,用户请参阅 tests/README.md。
我们使用 Trogdor 作为 Apache Kafka 的测试框架。您可以使用它来运行基准测试和其他工作负载。
请参阅 trogdor/README.md。
请参阅 vagrant/README.md。
请参阅 examples/README.md。
Apache Kafka 致力于建设社区;我们欢迎您提供任何想法或 补丁。您可以通过 Apache 邮件列表 联系我们。
如需贡献,请按照以下说明操作: