Zookeeper 主要用來跟蹤Kafka 集羣中的節點狀態, 以及Kafka Topic, message 等等其餘信息. 同時, Kafka 依賴於Zookeeper, 沒有Zookeeper 是不能運行起來Kafka 的. node
該圖片盜自大牛的博客:http://blog.csdn.net/lizhitao/article/details/23744675shell
在ZK 的監視端, 運行ls /
, 能夠列出全部的頂級節點, 主要包含如下的節點:服務器
經過字面意思可以理解其記錄的內容. 須要說明的是isr_change_notification 節點. 在Kafka 中, Leader 和Follower 的數據同步遵循的是"最終一致"原則, 也就是數據同步會有延遲, 但保證最終數據的一致性.session
isr 是'in-sync' replicas 的縮寫, 表明的是與Leader 數據已經經過過的replica, 它會做爲重選Leader 時做爲判斷依據.工具
2.1 kafka自帶zookeeper測試
進入kafka的bin目錄,執行如下命令:ui
[root@localhost bin]# ./zookeeper-shell.sh 172.16.10.91:2181,172.16.10.92:2181,172.16.10.93:2181
2.2 獨立安裝zookeeperspa
服務端開啓的狀況下,進入客戶端的命令:.net
{zookeeper目錄}/bin/zkCli.sh
(1)查看數據:ls, ls2命令行
【ls】會顯示該節點下的子節點信息
例如:【ls /】:顯示zookeeper根目錄下的子節點
例如:【ls /brokers/ids】:顯示集羣中的Broker列表
【ls2】命令會顯示該節點的子節點信息和屬性信息
例如:【ls2 /brokers/topics/cwx】:顯示cwx主題的子節點信息和屬性信息
(2)獲取數據:get
get 命令會顯示該節點的節點數據內容和屬性信息
例如:【get /brokers/topics/topic-01】:能夠獲取topic-01 主題的值
能夠看出, 該Topic 只有一個Partition
例如:【get /brokers/topics/topic-01/partitions/0/state】:獲取Topic Partition 的信息
能夠看出, 該Topic 有3個replica, 並且當前狀態都是isr(也就是已處於最新狀態). 同時, 當前的Leader 是Broker 0.
(3)獲取數據:rmr
rmr 命令刪除指定路徑的節點
例如:【rmr /brokers/topics/test】:刪除test主題
4.1 topic註冊信息
命令:/brokers/topics/[topic]
存儲某個topic的partitions全部分配信息
Schema: { "version": "版本編號目前固定爲數字1", "partitions": { "partitionId編號": [ 同步副本組brokerId列表 ], "partitionId編號": [ 同步副本組brokerId列表 ], ....... } } Example: { "version": 1, "partitions": { "0": [1, 2], "1": [2, 1], "2": [1, 2], } }
4.2 partition狀態信息
命令:/brokers/topics/[topic]/partitions/[partitionId]/state
Schema: { "controller_epoch": 表示kafka集羣中的中央控制器選舉次數, "leader": 表示該partition選舉leader的brokerId, "version": 版本編號默認爲1, "leader_epoch": 該partition leader選舉次數, "isr": [同步副本組brokerId列表] } Example: { "controller_epoch": 1, "leader": 2, "version": 1, "leader_epoch": 0, "isr": [2, 1] }
4.3 Broker註冊信息
命令:/brokers/ids/[0...N]
每一個broker的配置文件中都須要指定一個數字類型的id(全局不可重複),此節點爲臨時znode(EPHEMERAL)
Schema: { "jmx_port": jmx端口號, "timestamp": kafka broker初始啓動時的時間戳, "host": 主機名或ip地址, "version": 版本編號默認爲1, "port": kafka broker的服務端端口號,由server.properties中參數port肯定 } Example: { "jmx_port": 6061, "timestamp":"1403061899859" "version": 1, "host": "192.168.1.148", "port": 9092 }
4.4 Controller epoch
命令:/controller_epoch -> int (epoch)
此值爲一個數字,kafka集羣中第一個broker第一次啓動時爲1,之後只要集羣中center controller中央控制器所在broker變動或掛掉,就會從新選舉新的center controller,每次center controller變動controller_epoch值就會 + 1;
4.5 Controller註冊信息
命令:/controller -> int (broker id of the controller)
存儲center controller中央控制器所在kafka broker的信息
Schema: { "version": 版本編號默認爲1, "brokerid": kafka集羣中broker惟一編號, "timestamp": kafka broker中央控制器變動時的時間戳 } Example: { "version": 1, "brokerid": 3, "timestamp": "1403061802981" }
4.6 Consumer offset
命令:/consumers/[groupId]/offsets/[topic]/[partitionId] -> long (offset)
用來跟蹤每一個consumer目前所消費的partition中最大的offset,此znode爲持久節點,能夠看出offset跟group_id有關,以代表當消費者組(consumer group)中一個消費者失效,從新觸發balance,其餘consumer能夠繼續消費。
4.7 刪除topics
命令:/admin/delete_topics
Schema: { "fields": [ {"name": "version", "type": "int", "doc": "version id"}, {"name": "topics", "type": { "type": "array", "items": "string", "doc": "an array of topics to be deleted"} } ] } 例子: { "version": 1, "topics": ["foo", "bar"] }
4.8 Topic配置
命令:/config/topics/[topic_name]
{ "version": 1, "config": { "config.a": "x", "config.b": "y", ... } }
離開了Zookeeper, Kafka 不能對Topic 進行新增操做, 可是仍然能夠produce 和consume 消息.
PS: 在運行過程當中, 若是先關閉掉了Zookeeper, 而後再去關閉Kafka, 會發現Kafka 後臺一直結束不掉, 這是由於Kafka 會被block 在與Zookeeper 的重連過程當中. 解決方法是重啓Zookeeper , 而後先關閉Kafka 再關閉Zookeeper.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
補充參考:
1. 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
2. 顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據
3. 建立文件,並設置初始內容: create /zk "test" 建立一個新的 znode節點「 zk 」以及與它關聯的字符串
4. 獲取文件內容: get /zk 確認 znode 是否包含咱們所建立的字符串
5. 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置
6. 刪除文件: delete /zk 將剛纔建立的 znode 刪除
7. 退出客戶端: quit
8. 幫助命令: help
ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大可能是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端能夠經過 telnet 或 nc 向 ZooKeeper 提交相應的命令
1. 能夠經過命令:echo stat|nc 127.0.0.1 2181 來查看哪一個節點被選擇做爲follower或者leader
2. 使用echo ruok|nc 127.0.0.1 2181 測試是否啓動了該Server,若回覆imok表示已經啓動。
3. echo dump| nc 127.0.0.1 2181 ,列出未經處理的會話和臨時節點。
4. echo kill | nc 127.0.0.1 2181 ,關掉server
5. echo conf | nc 127.0.0.1 2181 ,輸出相關服務配置的詳細信息。
6. echo cons | nc 127.0.0.1 2181 ,列出全部鏈接到服務器的客戶端的徹底的鏈接 / 會話的詳細信息。
7. echo envi |nc 127.0.0.1 2181 ,輸出關於服務環境的詳細信息(區別於 conf 命令)。
8. echo reqs | nc 127.0.0.1 2181 ,列出未經處理的請求。
9. echo wchs | nc 127.0.0.1 2181 ,列出服務器 watch 的詳細信息。
10. echo wchc | nc 127.0.0.1 2181 ,經過 session 列出服務器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表。
11. echo wchp | nc 127.0.0.1 2181 ,經過路徑列出服務器 watch 的詳細信息。它輸出一個與 session 相關的路徑。
參考:
http://blog.csdn.net/lizhitao/article/details/23744675