大家好,我是石臻臻,這是「kafka專欄」連載中的第「10」篇文章...
歡迎關注石臻臻,獲取最新推送
在kafka_2.8.0之前,kafka還是需要依賴zookeeper運行,kafka中的很多數據都存儲在zk中, 例如 「Broker的註冊信息」、「Topic的信息」 、 「運維操作臨時信息 」、 「配置信息」等等其他信息。
下面我們用用一張圖來窺探kafka在zookeeper中的全貌,建議收藏!!!
一圖知全貌
0 1
/cluster
01- /cluster/id 持久數據節點
集羣ID 當第一臺Broker啓動的時候, 發現
/cluster/id
不存在,那麼它就會把自己的cluster.id
配置寫入zk; 標記當前zk是屬於集羣哪個集羣; 後面其他的Broker啓動的時候會去獲取該數據, 如果發現數據跟自己的配置不一致; 則拋出異常,加入的不是同一個集羣; 數據示例:{"version":"1","id":"0"}
0 2
/controller_epoch 持久數據節點
Controller選舉次數;
0 3
/Controller 臨時數據節點
當前Controller角色的BrokerId,數據示例:
{"version":1,"brokerid":0,"timestamp":"1624415590383"}
刪除該節點立馬觸發重新選舉
0 4
/log_dir_event_notification
zk的數據中有一個節點
/log_dir_event_notification/
,這是一個序列號持久節點 這個節點在kafka中承擔的作用是: 當某個Broker上的LogDir出現異常時(比如磁盤損壞,文件讀寫失敗,等等異常): 向zk中新增一個子節點/log_dir_event_notification/log_dir_event_序列號
;Controller監聽到這個節點的變更之後,會向Brokers們發送LeaderAndIsrRequest
請求; 然後做一些副本脫機的善後操作
0 5
/isr_change_notification/log_dir_event_{序列號}
當Isr有變更的時候,會寫入這個節點Controller監聽變更
0 6
/admin
01 -/admin/delete_topics/{topicName} 持久節點,待刪除Topic
存在此節點表示 當前Topic需要被刪除
02 - /admin/reassign_partitions 持久數據節點
如果有此節點,表示當前正在進行數據遷移,裏面的數據就是正在遷移的配置 示例數據:
0 7
/brokers
01 -/brokers/seqid
/brokers/seqid
: 全局序列號裏面沒有數據,主要是用了節點的dataVersion
信息來當全局序列號在kafka中的作用: 自動生成BrokerId主要是用來自動生成brokerId; 一個集羣如果特別大,配置brokerId的時候不能重複,一個個設置比較累; 可以讓Broker自動生成BrokerId
server.properties
配置
## 設置Brokerid能夠自動生成
broker.id.generation.enable=true
## 設置BrokerId<0 (如果>=0則以此配置爲準)
broker.id=-1
## 自動生成配置的起始值
reserved.broker.max.id=20000
BrokerId計算方法
brokerId = {reserved.broker.max.id} +
/brokers/seqid
.dataVersion每次想要獲取
/brokers/seqid
的dataVersion值的時候都是用 set方法,set的時候會返回version數據,並不是get;每次set這個節點數據,版本信息就會自增;所以就實現了全局自增ID了;
02 - /brokers/ids/{id} 臨時數據節點 : 在線BrokerID
在線的Broker都會在這裏註冊一個節點; 下線自動刪除
03 - /brokers/topics/{topicName}持久數據節點
存儲 topic的分區副本分配信息 例如:
{"version":1,"partitions":{"0":[0]}}
/brokers/topics/{topicName}/{分區號}/state 持久數據節點
存儲指定分區的
leader
和isr
等信息 例如:{"controller_epoch":203,"leader":0,"version":1,"leader_epoch":0,"isr":[0]}
往期推薦
2021-08-30
2021-08-25
2021-08-16
2021-08-09
2021-07-29
你好,我是石臻臻,工作8年的互聯網老兵,豐富的開發和管理經驗, 現在任職於「 滴滴技術專家 」崗位,從事開源建設工作,公衆號講解 Java/中間件/大數據 等技術棧相關內容,歡迎關注石臻臻,進滴滴 「 高質量 」 「 滴滴開源技術答疑羣 」 , 羣內每週技術專家輪流值班答疑,加石臻臻微信交個朋友,交流交流技術分享分享生活
本文分享自微信公衆號 - 大數據流動(RealtimeBigdata)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。