我開始使用Confluent Kafka,它需要運行Zookeeper(zookeeper-server-start /etc/kafka/zookeeper.properties
),然後是Kafka(kafka-server-start /etc/kafka/server.properties
)。我正在編寫一個應該運行Kafka和Zookeeper的Upstart腳本。問題是卡夫卡應該阻塞,直到Zookeeper準備好(因爲它依賴於它),但我找不到一個可靠的方法來知道什麼時候Zookeeper準備好了。這裏有一些嘗試以僞代碼運行動物園管理員服務器啓動後:如何啓動Zookeeper,然後是Kafka?
使用硬編碼塊
sleep 5
不能在較慢的計算機上可靠地工作和/或等待時間超過需要。
檢查時的東西(希望動物園管理員)在端口2181
wait until $(echo stat | nc localhost ${port}) is not none
此運行似乎沒有工作,因爲它不等待足夠長的動物園管理員接受卡夫卡連接。
檢查日誌
wait until specific string in zookeeper log is found
這是簡略,竟然沒有不能也錯誤地發現了太多的字符串(如「綁定到端口[...]」)。
有沒有一種可靠的方法來了解Zookeeper何時可以接受Kafka連接?否則,我將不得不求助於從您的評論的1和2
我會期望技術#2足夠。你可以在嘗試技術#2時添加關於啓動失敗的更多細節嗎? –
@ChrisNauroth我在技術#2中獲得的Kafka確切的錯誤如下:「致命[Kafka Server 0],在KafkaServer啓動過程中致命錯誤。準備關閉(kafka.server.KafkaServer) java.lang.RuntimeException :代理已經在路徑/ brokers/ids/0上註冊,這可能表明您已經配置了一個已經在使用的brokerid,或者您已經關閉了該代理,並且以比zookeeper超時更快的速度重新啓動它,重新註冊「。 - 如果我在此之後添加延遲,這很好。 – nico