0

我有一个 Kafka 客户端,我需要测试它的功能。为此,我需要在本地创建一个 Kafka 集群并连接到它。根据限制,我不能为此使用 Docker 映像或 K8s。

我做了一个搜索,发现这个类用于测试,但我不能更改代理端口。

我尝试使用Debezium KafkaCluster,但它无法间歇性地创建集群,因此导致间歇性测试失败。

有没有办法在本地创建一个 Kafka 集群,为基于 java 的 Kafka 客户端运行集成测试?

4

3 回答 3

1

我知道这听起来像是只给你一个链接,但我使用的 testcontainer 库可以很好地完成这项工作。

没有什么特别要添加的,除了给你一个文档链接: https ://www.testcontainers.org/modules/kafka/

于 2019-08-26T16:05:23.230 回答
1

我一直这样做。一个 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命令等。

于 2019-08-26T21:24:12.940 回答
0

好吧,发布的答案有所帮助,但我想要一些不同的东西。最终创建了我自己的实现。如果有人愿意,他们可以使用它

我用kafka.server.KafkaServerorg.apache.zookeeper.server.ZooKeeperServerMain为此。

于 2020-06-02T13:07:35.963 回答