暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kafka源码解析三-zookeeper篇

男士养成记 2021-11-15
233

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路径下创建临时节点



文章转载自男士养成记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论