使用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 |
从本地可执行文件中创建一个容器
你可以使用以下方法从本地可执行文件中创建一个容器:
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 \ |
或者设置环境变量,例如
docker run -it --rm -p 19092:9092 \ |
具体点击标题