创建 Kafka 集群以测试基于 Java 的 Kafka 客户端
Create Kafka cluster for testing Java-based Kafka clients
我有一个 Kafka 客户端,我需要测试它的功能。为此,我需要在本地创建一个 Kafka 集群,并连接到它。根据限制,我不能为此使用 Docker 图像或 K8s。
我进行了搜索,发现 This class 用于测试,但我无法更改代理端口。
我尝试使用 Debezium KafkaCluster 但它无法间歇性地创建集群,因此导致间歇性测试失败。
有没有办法在本地创建 Kafka 集群,以便 运行 对基于 java 的 Kafka 客户端进行集成测试?
我知道这听起来像是只给你一个 link,但我使用的 testcontainer 库可以很好地完成这项工作。
没有什么特别要补充的,除了给你一个 link 给文档:
https://www.testcontainers.org/modules/kafka/
我一直这样做。一个 Kafka "cluster" 实际上只是至少一个 Kafka 服务器和至少一个 Zookeeper 服务器。他们都可以 运行 在您正在开发的同一个盒子上本地。当然,不建议将只有一个 kafka 服务器和 zookeeper 节点的设置用于生产,因为没有冗余,但它非常适合端到端测试、调试等。
这是我在本地 运行 上面使用的命令。我假设您下载了最新的 Kafka 融合包,并且位于 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
以等待前一个服务器联机然后再转到下一个),然后每次需要在本地 运行 集群时,只需 运行 脚本即可。但是请注意,稍后您需要手动终止进程,即使用 ps
查找它们的 pid 号,发出 kill
命令等
好吧,发布的答案有所帮助,但我想要一些不同的东西。最终创建了我自己的实现。如果有人想要,they can use it.
我为此使用了 kafka.server.KafkaServer
和 org.apache.zookeeper.server.ZooKeeperServerMain
。
我有一个 Kafka 客户端,我需要测试它的功能。为此,我需要在本地创建一个 Kafka 集群,并连接到它。根据限制,我不能为此使用 Docker 图像或 K8s。
我进行了搜索,发现 This class 用于测试,但我无法更改代理端口。
我尝试使用 Debezium KafkaCluster 但它无法间歇性地创建集群,因此导致间歇性测试失败。
有没有办法在本地创建 Kafka 集群,以便 运行 对基于 java 的 Kafka 客户端进行集成测试?
我知道这听起来像是只给你一个 link,但我使用的 testcontainer 库可以很好地完成这项工作。
没有什么特别要补充的,除了给你一个 link 给文档: https://www.testcontainers.org/modules/kafka/
我一直这样做。一个 Kafka "cluster" 实际上只是至少一个 Kafka 服务器和至少一个 Zookeeper 服务器。他们都可以 运行 在您正在开发的同一个盒子上本地。当然,不建议将只有一个 kafka 服务器和 zookeeper 节点的设置用于生产,因为没有冗余,但它非常适合端到端测试、调试等。
这是我在本地 运行 上面使用的命令。我假设您下载了最新的 Kafka 融合包,并且位于 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
以等待前一个服务器联机然后再转到下一个),然后每次需要在本地 运行 集群时,只需 运行 脚本即可。但是请注意,稍后您需要手动终止进程,即使用 ps
查找它们的 pid 号,发出 kill
命令等
好吧,发布的答案有所帮助,但我想要一些不同的东西。最终创建了我自己的实现。如果有人想要,they can use it.
我为此使用了 kafka.server.KafkaServer
和 org.apache.zookeeper.server.ZooKeeperServerMain
。