2 zookeeper的角色
zookeeper是broker如何工作的一個關(guān)鍵組件,目前也是成功運行kafka的一個要求。在broker啟動的時候,zookeeper需要先啟動。注意后期kafka版本是可以不依賴kafka的,應(yīng)該是2.8.0開始。
由于zk需要有一個最小數(shù)字才能選舉出leader并做出決定,這個zk集群對我們的broker確實很重要。zk本身包含我們kafka集群中的主題等信息。zk通過協(xié)調(diào)任務(wù)和通知來助力broker。如果ZooKeeper實例損壞,主題元數(shù)據(jù)和配置可能會丟失。
通常,我們不需要將ZooKeeper集群的詳細信息(IP地址和端口)開放給生產(chǎn)者和消費者應(yīng)用程序。某些舊框架也有提供將客戶端與ZooKeeper集群連接起來的方式,比如3.1.x版本的Spring Cloud Stream,它允許我們設(shè)置zkNodes屬性。該值默認為本地主機,且在大多數(shù)情況下應(yīng)該單獨保留以避免ZooKeeper依賴。zkNodes屬性被標(biāo)記為已棄用,但是您永遠不知道是否會遇到以前的舊代碼,因此您需要密切關(guān)注它。為什么現(xiàn)在和將來都不需要這個呢?除了Kafka并不總是需要zk之外,我們在應(yīng)用程序中避免不必要的外部依賴也很重要。此外,如果我們使用Kafka和客戶端直接通信,則需要更少的端口。
使用Kafka工具zookeeper-shell.sh,它位于我們Kafka安裝的bin文件夾中,我們可以連接到集群中的ZooKeeper主機,并查看數(shù)據(jù)是如何存儲的。kafka使用的路徑可以去ZkData.scala文件中查閱。
在這個文件中,您可以找到諸如/controller、/controller_epoch、/config和/brokers等路徑。如果我們查看/brokers/topics路徑,我們將看到一個我們已經(jīng)創(chuàng)建的主題列表。在這一點上,我們希望至少在列表中包含kinaction_helloworld(之前章節(jié)已經(jīng)創(chuàng)建過的)主題。
bin/zookeeper-shell.sh localhost:2181
備注:這個我還真的才知道。就是直接在bin目錄下就有zk的客戶端的了。不用自己去找zk客戶端。zk退出客戶端的命令是:quit