我希望用于集成测试的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>
的替代方式。
答案 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
并等待其可用,但这并不总是保证经纪人实际上已经准备好 。