我有一个 Kafka 客户端,我需要测试它的功能。为此,我需要在本地创建一个 Kafka 集群并连接到它。根据限制,我不能为此使用 Docker 映像或 K8s。
我做了一个搜索,发现这个类用于测试,但我不能更改代理端口。
我尝试使用Debezium KafkaCluster,但它无法间歇性地创建集群,因此导致间歇性测试失败。
有没有办法在本地创建一个 Kafka 集群,为基于 java 的 Kafka 客户端运行集成测试?
我有一个 Kafka 客户端,我需要测试它的功能。为此,我需要在本地创建一个 Kafka 集群并连接到它。根据限制,我不能为此使用 Docker 映像或 K8s。
我做了一个搜索,发现这个类用于测试,但我不能更改代理端口。
我尝试使用Debezium KafkaCluster,但它无法间歇性地创建集群,因此导致间歇性测试失败。
有没有办法在本地创建一个 Kafka 集群,为基于 java 的 Kafka 客户端运行集成测试?
我知道这听起来像是只给你一个链接,但我使用的 testcontainer 库可以很好地完成这项工作。
没有什么特别要添加的,除了给你一个文档链接: https ://www.testcontainers.org/modules/kafka/
我一直这样做。一个 Kafka“集群”实际上只是至少一个 Kafka 服务器,以及至少一个 Zookeeper 服务器。它们都可以在您正在开发的同一个盒子上本地运行。当然,不建议在生产环境中使用只有一个 kafka 服务器和 zookeeper 节点的设置,因为没有冗余,但它非常适合测试端到端、调试等。
这是我用来在本地运行上述命令的命令。我假设你下载了最新的 Kafka confluent 包,并且在bin
目录中:
nohup ./zookeeper-server-start ../etc/kafka/zookeeper.properties > /dev/null 2>&1 &
nohup ./kafka-server-start ../etc/kafka/server-original.properties > /dev/null 2>&1 &
我还需要架构注册表在本地运行,所以我添加了这个:
nohup ./schema-registry-start ../etc/schema-registry/schema-registry.properties >/dev/null 2>&1 &
请注意,所有命令都nohup
以开头,并且通过将所有输出发送到/dev/null
. 如果您确实需要在控制台上查看日志输出,则可以删除它们,或者您可以根据需要将其重定向到实际的日志文件。
上面的好处是您可以将它们打包在一个脚本中(确保sleep 5
在每个命令之间添加一个中间以等待上一个服务器上线,然后再转到下一个),然后您可以简单地运行脚本每次您需要在本地运行集群时。但是请注意,您稍后需要手动终止进程,即使用 找到它们的 pid 号ps
、发出kill
命令等。
好吧,发布的答案有所帮助,但我想要一些不同的东西。最终创建了我自己的实现。如果有人愿意,他们可以使用它。
我用kafka.server.KafkaServer
和org.apache.zookeeper.server.ZooKeeperServerMain
为此。