kafka 中 zookeeper 具體是做什麼的?
- 2019 年 12 月 15 日
- 筆記
zookeeper 是 kafka 不可分割的一部分,可見其重要程度,所以我們有必要了解一下 zookeeper 在 kafka 中的具體工作內容。
而且,這也是面試時經常問的。
zookeeper 存儲了一些關於 consumer 和 broker 的信息,那麼就從這兩方面說明 zookeeper 的作用。
1. broker
- 狀態
zookeeper 記錄了所有 broker 的存活狀態,broker 會向 zookeeper 發送心跳請求來上報自己的狀態。
zookeeper 維護了一個正在運行並且屬於集群的 broker 列表。
- 控制器選舉
kafka 集群中有多個 broker,其中有一個會被選舉為控制器。
控制器負責管理整個集群所有分區和副本的狀態,例如某個分區的 leader 故障了,控制器會選舉新的 leader。
從多個 broker 中選出控制器,這個工作就是 zookeeper 負責的。
- 限額權限
kafka 允許一些 client 有不同的生產和消費的限額。
這些限額配置信息是保存在 zookeeper 裏面的。
所有 topic 的訪問控制信息也是由 zookeeper 維護的。
- 記錄 ISR
ISR(in-sync replica) 是 partition 的一組同步集合,就是所有 follower 裏面同步最積極的那部分。
一條消息只有被 ISR 中的成員都接收到,才被視為「已同步」狀態。
只有處於 ISR 集合中的副本才有資格被選舉為 leader。
zookeeper 記錄著 ISR 的信息,而且是實時更新的,只要發現其中有成員不正常,馬上移除。
- node 和 topic 註冊
zookeeper 保存了所有 node 和 topic 的註冊信息,可以方便的找到每個 broker 持有哪些 topic。
node 和 topic 在 zookeeper 中是以臨時節點的形式存在的,只要與 zookeeper 的 session 一關閉,他們的信息就沒有了。
- topic 配置
zookeeper 保存了 topic 相關配置,例如 topic 列表、每個 topic 的 partition 數量、副本的位置等等。
2. consumer
- offset
kafka 老版本中,consumer 的消費偏移量是默認存儲在 zookeeper 中的。
新版本中,這個工作由 kafka 自己做了,kafka 專門做了一個 offset manager。
- 註冊
和 broker 一樣,consumer 也需要註冊。
consumer 會自動註冊,註冊的方式也是創建一個臨時節點,consumer down 了之後就會自動銷毀。
- 分區註冊
kafka 的每個 partition 只能被消費組中的一個 consumer 消費,kafka 必須知道所有 partition 與 consumer 的關係。