Je commence avec Confluent Kafka qui nécessite de lancer Zookeeper (zookeeper-server-start /etc/kafka/zookeeper.properties
) puis Kafka (kafka-server-start /etc/kafka/server.properties
). J'écris un script Upstart qui devrait exécuter à la fois Kafka et Zookeeper. Le problème est que Kafka devrait bloquer jusqu'à ce que Zookeeper soit prêt (parce que cela dépend de lui) mais je ne peux pas trouver un moyen fiable de savoir quand Zookeeper est prêt. Voici quelques tentatives de pseudo-code après l'exécution du démarrage du serveur Zookeeper:Comment démarrer Zookeeper puis Kafka?
Utilisez un bloc hardcoded
sleep 5
ne fonctionne pas correctement sur les ordinateurs plus lents et/ou attend plus longtemps que nécessaire.
Vérifiez quand quelque chose semble (je l'espère Zookeeper) est en cours d'exécution sur le port 2181
wait until $(echo stat | nc localhost ${port}) is not none
Cela n'a pas travailler comme il n'attend pas assez longtemps pour que Zookeeper d'accepter une connexion Kafka.
Vérifiez les journaux
wait until specific string in zookeeper log is found
C'est peu précis et il n'y a même pas une chaîne qui ne peut être trouvée aussi en cas d'erreur trop (par exemple « connecte au port [...] »).
Existe-t-il un moyen fiable de savoir quand Zookeeper est prêt à accepter une connexion Kafka? Sinon, je vais devoir recourir à une combinaison de 1 et 2.
Je m'attendais à ce que la technique n ° 2 soit suffisante. Pouvez-vous s'il vous plaît ajouter plus de détails sur la façon dont le démarrage échoue en essayant la technique n ° 2? –
@ChrisNauroth L'erreur exacte que je reçois dans Kafka pour la technique n ° 2 est la suivante: "FATAL [Kafka Server 0], Erreur fatale lors du démarrage de KafkaServer Préparez-vous à l'arrêt (kafka.server.KafkaServer) java.lang.RuntimeException : Un courtier est déjà enregistré sur le chemin/brokers/ids/0. Cela indique probablement que vous avez configuré un brokerid déjà utilisé, ou bien vous avez arrêté ce broker et l'avez redémarré plus vite que le timeout de zookeeper pour qu'il apparaisse être ré-enregistrer. " - C'est bien si j'ajoute un délai après cela cependant. – nico