内容纲要
概要描述
在kafka_2.8.0之前,kafka还是需要依赖zookeeper运行,kafka中的很多数据都存储在zk中, 例如 「Broker的注册信息」、「Topic的信息」 、 「运维操作临时信息 」、 「配置信息」等等其他信息。
详细说明
下面我们用用一张图来窥探kafka在zookeeper中的全貌
01- /cluster/id 持久数据节点
集群ID 当第一台Broker启动的时候, 发现/cluster/id
不存在,那么它就会把自己的cluster.id
配置写入zk; 标记当前zk是属于集群哪个集群; 后面其他的Broker启动的时候会去获取该数据, 如果发现数据跟自己的配置不一致; 则抛出异常,加入的不是同一个集群; 数据示例:{"version":"1","id":"0"}
02- /controller_epoch 持久数据节点
Controller选举次数;
03- /Controller 临时数据节点
当前Controller角色的BrokerId,数据示例:{"version":1,"brokerid":0,"timestamp":"1624415590383"}
删除该节点立马触发重新选举
04- /log_dir_event_notification
zk的数据中有一个节点/log_dir_event_notification/
,这是一个序列号持久节点 这个节点在kafka中承担的作用是: 当某个Broker上的LogDir出现异常时(比如磁盘损坏,文件读写失败,等等异常): 向zk中新增一个子节点/log_dir_event_notification/log_dir_event_序列号
;Controller监听到这个节点的变更之后,会向Brokers们发送LeaderAndIsrRequest
请求; 然后做一些副本脱机的善后操作
05- /isr_change_notification/log_direvent{序列号}
当Isr有变更的时候,会写入这个节点Controller监听变更