将Kafka和Zookeeper通过Quarkus和GraalVM编译为本地快速启动的原生代码


使用kafka-native可以将Kafka 代理(和 Zookeeper)通过Quarkus 和 GraalVM 编译为本机原生代码。

项目结构

  • quarkus-kafka-server-extension:Quarkus 扩展包括使用 GraalVM 将 Kafka Server 编译为本机。
  • quarkus-zookeeper-server-extension:Quarkus 扩展包括使用 GraalVM 将 Zookeeper Server 编译为本机。
  • kafka-server:Quarkus 应用程序使用 kafka-server-extension 启动 Kafka 服务器。编译为 JVM 和本机可执行文件。
  • zookeeper-server:Quarkus 应用程序使用 Zookeeper-server-extension 启动 Kafka 服务器。编译为 JVM 和本机可执行文件。
  • kafka-native-test-container:测试容器使用本机编译的 kafka-server 启动单节点 Kafka Broker,并使用本机编译的 Zookeeper-server 启动单节点 Zookeeper。包括集成测试。

运行:
mvn install

在开发模式下运行kafka
您可以在开发模式下运行 kafka,从而使用以下命令启用实时编码:
cd kafka-server mvn compile quarkus:dev
启动单节点 Kafka 代理侦听PLAINTEXT://9092. 用作./target/log-dir日志目录。

在开发模式下运行zookeeper
您可以在开发模式下运行zookeeper,以启用实时编码:
cd zookeeper-server mvn compile quarkus:dev
启动一个单节点 Zookeeper 监听2181.

打包和运行该应用程序
该应用程序可以在kafka-server(或zookeeper-server)目录下使用以下方式进行打包:
mvn package

它在target/quarkus-app/目录下生成quarkus-run.jar文件。请注意,这不是一个超级jar,因为依赖关系被复制到了target/quarkus-app/lib/目录中。

现在可以使用java -jar target/quarkus-app/quarkus-run.jar来运行该应用程序。

创建本机可执行文件
您可以使用以下kafka-server(或zookeeper-server) 目录创建本机可执行文件:
mvn package -Pnative

或者,如果您没有安装 GraalVM,您可以使用以下命令在容器中运行本机可执行文件构建:
mvn package -Pnative -Dquarkus.native.container-build=true

然后,您可以使用以下命令执行本机可执行文件:

./target/kafka-server-1.0.0-SNAPSHOT-runner

./target/zookeeper-server-1.0.0-SNAPSHOT-runner

从本地可执行文件中创建一个容器
你可以使用以下方法从本地可执行文件中创建一个容器:

mvn package -Dnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true

容器图像将以quay.io/ogunalp/kafka-native:1.0.0-SNAPSHOT和quay.io/ogunalp/zookeeper-native:1.0.0-SNAPSHOT的标签构建。

如果你想重新使用现有的本地可执行文件:

mvn package -Dnative -Dquarkus.native.reuse-existing=true -Dquarkus.container-image.build=true

如果你的容器运行时间不在本地运行,请使用参数-Dquarkus.native.reuse-existing=true而不是-Dquarkus.native.container-build=true。

然后你就可以用以下方式运行docker镜像:

docker run -p 19092:9092 -it --rm -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:19092 quay.io/ogunalp/kafka-native:1.0.0-SNAPSHOT


配置
您可以使用 Java 系统属性设置配置选项,例如

java -Dserver.delete-dirs-on-close=true \
  -Dserver.properties-file=server.properties \
  -Dkafka.advertised.listeners=SSL://localhost:9092 -jar ./target/quarkus-app/quarkus-run.jar

或者设置环境变量,例如

docker run -it --rm -p 19092:9092 \
  -v $(pwd):/conf \
  -e SERVER_PROPERTIES_FILE=/conf/server.properties \
  -e KAFKA_ADVERTISED_LISTENERS=SASL_PLAINTEXT://localhost:19092 \
  quay.io/ogunalp/kafka-native:1.0.0-SNAPSHOT

具体点击标题