kafka controller这一块儿需要一些zookeeper基础,今天我在这里给自己补充一下相关基础知识:
1:安装篇
去官网下载时注意3.5版本之后要下载bin包,下载后解压将conf下zoo_sample.cfg替换成zoo.cfg, 完成后点击zkServer.bat或者进入cmd运行 zkServer.bat,第一种方式如果闪退,编辑bat文件在倒数第二行加上PAUSE查看问题。
2:使用篇
启动完成后另起窗口(或者可以使用其他工具,此处略),执行命令
.\zkCli.cmd -server 127.0.0.1:2181 进入以下界面

ls / 返回根目录内容,我这里已经kafka已经连上了zookeeper,目录如下:
[admin, brokers, cluster, config, consumers, controller,controller_epoch, isr_change_notification, latest_producer_id_block,log_dir_event_notification, zookeeper]
brokers下有三个目录
[ids, seqid, topics]
ids:存放各台broker,不同的broker有不同id,它是临时节点schema:{"listener_security_protocol_map": {"PLAINTEXT": "PLAINTEXT" //支持的协议},"endpoints": ["PLAINTEXT://MS-VDCCWTLIPGAT:9092"],"jmx_port": 9999, // jmx端口"host": "MS-VDCCWTLIPGAT","timestamp": "1636982217717","port": 9092,"version": 4 // 版本号}
seqid:broker启动时检查并确保存在,永久节点
topics:集群中topic信息get /brokers/topics/service.orchid.contract.code5{"version":2,"partitions":{"2":[1],"1":[0],"0":[2]},"adding_replicas":{},"removing_replicas":{}}get /brokers/topics/service.orchid.contract.code5/partitions/2/state{"controller_epoch":104,"leader":1,"version":1,"leader_epoch":0,"isr":[1]}schema:{"controller_epoch": 表示kafka集群中的中央控制器选举次数,"leader": 表示该partition选举leader的brokerId,"version": 版本编号默认为1,"leader_epoch": 该partition leader选举次数,"isr": [同步副本组brokerId列表]}
以上概念会在后面源码中具体提到
controller_epoch(永久节点,控制年代)
这个值是一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会加1。
isr_change_notification
在isr有变更时会在此目录下创建顺序文件夹,它负责保存重选controller的可用节点信息
consumers
消费者节点信息
config
它下面有5条目录
[brokers, changes, clients, topics, users]
分别存放各自的定制化配置信息
cluster
保存集群id和版本信息,broker 启动时从/cluster/id获取,如果没有broker生成
controller
集群的临时节点, 存储center controller中央控制器所在kafka broker的信息,整个集群中只有一台机器会被选作controller,它负责集群中的元数据的维护,当partition的leader副本故障,由controller 负责为该partition重新选举新的leader 副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作。当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点




