(七)kafka的更新機制
A. 基礎概念
- 定義:元數據指用于尋找其他數據的標識,在kafka這類分布式集群中元數據特指各個節(jié)點brokers間所需的共享數據,如controller-epoch之類的信息。
- 方式:kafka的元數據選用zookeeper來進行集中管理,使用
/zkCli.sh -server 127.0.0.1后get /brokers/ids/0查看信息。 - 核心內容:kafka集群中的元數據記錄了broker的通信地址、各項配置信息、集群狀態(tài)、acl信息等,其具體作用有兩類。
- 客戶端zookeeper:通過元數據獲取服務地址,完成通信(服務發(fā)現)。
- 服務端kafka:通過元數據共享集群狀態(tài),一旦狀態(tài)變化后,controller能夠快速感知并通知到broker進行更新。
B. 元數據metadata定義
- broker級別的metadata
- 查看命令:
ls /brokers - ids:
get /brokers/ids/0,可以看到監(jiān)聽地址(kafka的地址+port)等信息。 - topics:
get /brokers/topics/xxxtopic/partitions/0,會獲取到controller epoch,leader epoch,leader所在broker,分區(qū)信息 & isr等信息。 - seqid:seqid信息主要用于自動生成brokerid。
- 查看命令:
- 配置信息級別的metadata
- 查看命令:
ls /config - 配置信息分類:共含有5類,changes、clients、brokers、topics & users。
- 除了changes,其他均可由kafka-configs.sh腳本進行動態(tài)配置。
- 注意:這些配置是持久化在zk上的,所以即便修改server.properties并重啟也不會改變zk內的值,只有通過kafka-configs.sh才可對持久化數據更改。
- 查看命令:
C. 元數據metadata更新
- 概述:metadata保存在zk上,一般通過注冊watcher監(jiān)聽metadata變化并更新,kafka基于controller & controller的watcher完成。
- 流程案例
- isr更新,若原本邏輯需要在zk的brokers/topics/xxxtopic/isr_change_notification路徑下創(chuàng)建節(jié)點。
- 現在基于controller,不需要zk直接創(chuàng)建節(jié)點,只需要controller注冊對于該路徑的監(jiān)聽即可。
- 元數據在出現變化時,會向約定好的/notification或者/changes目錄下創(chuàng)建對應的節(jié)點,并寫入對應的信息。controller或者broker 只需對約定好的目錄添加監(jiān)聽器即可迅速感知到集群元數據的變化,這很大程度上減小了Wacther的注冊數量,簡化了代碼實現。
- 總結:利用controller統(tǒng)一管理集群,controller自身會注冊大量watchers,但是降低了別的broker的watchers。