如何仅使用命令行检查Kafka是否启动?

时间:2018-12-06 15:24:05

标签: apache-kafka docker-compose

我希望用于集成测试的shell脚本能够等到Kafka启动。我尝试使用此命令从Kafka中获取主题,但该报告甚至在Docker compose显示[KafkaServer id=1001] started (kafka.server.KafkaServer)之前就已报告。也许是从Zookeeper而不是Kafka那里读。

docker start queue-service-kafka && docker-compose exec kafka /opt/kafka/bin/kafka-topics.sh --list --zookeeper=zookeeper:2181

有没有办法等到它出现?我讨厌sleep <x seconds>的替代方式。

1 个答案:

答案 0 :(得分:1)

这是我用于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

神奇之处在于第三行,它grep从Docker Compose输出日志,并在继续执行之前等待提供的文本。


您的kafka-topics返回得太早了。我认为,因为它只会转到ZK,而不是Kafka。您可以尝试使用kafkacat来询问代理本身。

您也可以尝试nc -vz broker-host 9092并等待其可用,但这并不总是保证经纪人实际上已经准备好