Apache kafka 如何仅使用命令行检查卡夫卡是否已启动?
我希望集成测试的shell脚本等到Kafka启动。我尝试使用此命令从Kafka获取主题,但它甚至在Docker compose显示[KafkaServer id=1001]启动Kafka.server.KafkaServer之前就报告了。也许是从动物园管理员那里读的,而不是卡夫卡Apache kafka 如何仅使用命令行检查卡夫卡是否已启动?,apache-kafka,docker-compose,Apache Kafka,Docker Compose,我希望集成测试的shell脚本等到Kafka启动。我尝试使用此命令从Kafka获取主题,但它甚至在Docker compose显示[KafkaServer id=1001]启动Kafka.server.KafkaServer之前就报告了。也许是从动物园管理员那里读的,而不是卡夫卡 docker start queue-service-kafka && docker-compose exec kafka /opt/kafka/bin/kafka-topics.sh --list -
docker start queue-service-kafka && docker-compose exec kafka /opt/kafka/bin/kafka-topics.sh --list --zookeeper=zookeeper:2181
那么有没有办法等到它出现呢?我讨厌睡眠的替代方法。以下是我在Kafka Connect中使用的一个小技巧,通过适当修改日志字符串,您也可以应用于Kafka代理:
export CONNECT_HOST=kafka-connect-cp
echo -e "\n--\n\nWaiting for Kafka Connect to start on $CONNECT_HOST … ⏳"
grep -q "Kafka Connect started" <(docker-compose logs -f $CONNECT_HOST)
echo "Now do something that needs to wait for Kafka Connect
神奇之处在于第三行,它将Docker Compose的日志输出变灰,并在继续执行之前等待提供的文本
我想你的卡夫卡主题回来得太快了,因为它只会出现在ZK,而不是卡夫卡。你可以试着用卡夫卡塔特来审问经纪人本身
您也可以尝试nc-vz代理主机9092并等待它可用,但这并不总是保证代理实际准备就绪 谢谢。我的相关字符串是INFO[KafkaServer id=1001]started kafka.server.KafkaServer。我在使用Java的集成测试中探索了一些技术?或者即使没有Java,shell脚本也可以转换吗?