一圖全解kafka在zookeeper中的數據結構


大家好,我是石臻臻,這是「kafka專欄」連載中的第「10」篇文章...

歡迎關注石臻臻,獲取最新推送

在kafka_2.8.0之前,kafka還是需要依賴zookeeper運行,kafka中的很多數據都存儲在zk中, 例如 「Broker的註冊信息」「Topic的信息」「運維操作臨時信息 」「配置信息」等等其他信息。


下面我們用用一張圖來窺探kafka在zookeeper中的全貌,建議收藏!!!


一圖知全貌  


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 持久數據節點

存儲指定分區的leaderisr等信息 例如:{"controller_epoch":203,"leader":0,"version":1,"leader_epoch":0,"isr":[0]}










往期推薦


聽說你還在傻傻的關閉服務器去改配置?(附視頻)

2021-08-30

這可能是kafka的一個小bug.....

2021-08-25

萬字長文解析kafka刪除Topic流程領導再也不用擔心我排查生產環境問題了(附教學視頻,)

2021-08-16

你知道Kafka創建Topic這個過程做了哪些事情嗎?(附視頻)

2021-08-09

3萬字長文嘔心瀝血教你徹底搞懂數據遷移原理(附配套教學視頻)

2021-07-29






你好,我是石臻臻,工作8年的互聯網老兵,豐富的開發和管理經驗, 現在任職於「 滴滴技術專家 」崗位,從事開源建設工作,公衆號講解 Java/中間件/大數據 等技術棧相關內容,歡迎關注石臻臻,進滴滴 「 高質量 」  「 滴滴開源技術答疑羣 」 , 羣內每週技術專家輪流值班答疑,加石臻臻微信交個朋友,交流交流技術分享分享生活


可幫忙 「 內推 」一二線大廠


本文分享自微信公衆號 - 大數據流動(RealtimeBigdata)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章