kafka在zookeeper中一些存儲結構

本文主要查看kafka在zookeeper中的一些存儲結構,便於更好的理解kafka的工作原理,其測試環境如下:

kafka 0.8.1.1
zookeeper 3.4.5

1 Broker node 註冊

當一個kafka broker啓動後,會向zookeeper註冊自己的節點信息,該節點爲一個臨時節點,噹噹broker斷開和zookeeper的連接時,其臨時節點將會被刪除。

其路徑爲:

/broker/ids/[0...N] 

其中[0..N]表示broker id(broker id唯一,不可以重複),znode的值爲對應broker的相關信息,如下:

{
    "jmx_port": -1, //JMX的端口號
    "timestamp": "1460082147315",//broker啓動的時間戳
    "host": "xx.xxx.xxx.xxx",//host
    "version": 1,//默認的版本
    "port": 9092  //broker進程的對外監聽的端口號
}

如下爲zk下的運行實例圖:

這裏寫圖片描述

2 Broker Topic 註冊

當一個broker啓動時,會向zookeeper註冊自己持有的topic和partitions信息。
其路徑爲:

/broker/topics/[topic]/partitions/[0...N] 

其中[0..N]表示partition索引號。其zonode下的信息如下:

{
    "controller_epoch": 17,//中央控制器的總的選舉次數
    "leader": 0,  //此partition的broker leader的id
    "version": 1, //默認版本號
    "leader_epoch": 1,//此partition的leader選舉的次數
    "isr": [
        0
    ]    //同步副本組brokerId順序列表
}

如下爲zk下的運行實例圖:

這裏寫圖片描述

3 Consumer id 註冊

在kafka consumer的配置參數中有:

#消費者的ID,若是沒有設置的話,會自增
consumer.id

當然,consumer id也可以手動設置。
在zookeeper查看相關consumer id的註冊信息,其路徑如下:

/consumers/[group_id]/ids/[consumer_id]

這仍然是一個臨時的znode,此節點的值爲格式如下:

{
    "version": 1,
    "subscription": {
        "user11": 1
    },
    "pattern": "static",
    "timestamp": "1460083658252"
}

{“topic_name”:#streams…},即表示此consumer目前所消費的topic + partitions列表。

如下爲zk下的運行實例圖:

這裏寫圖片描述

4 Consumer offset 跟蹤

用來跟蹤每個consumer group目前所消費的partition中最大的offset。

其路徑爲:

/consumers/[group_id]/offsets/[topic]/[partition_id]

此znode爲永久節點,可以看出offset跟group_id有關,以表明當group中一個消費者失效,其他consumer可以繼續消費。

如下爲zk下的運行實例圖:

這裏寫圖片描述

5 Partition Owner 註冊

用來標記partition被哪個consumer消費,爲臨時節點。
其路徑爲:

/consumers/[group_id]/owners/[topic]/[partition_id]

如下爲zk下的運行實例圖:

這裏寫圖片描述

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