Kafka在zookeeper中的存储结构

Kafka在zookeeper中存储的信息_端口号

1.topic注册信息

/brokers/topics/[topic] :

存储某个topic的partitions所有分配信息

Kafka在zookeeper中存储的信息_端口号_02

每个topic的信息

{
"version":1, // 版本编号目前固定为数字1
"partitions":{ // partitionId编号
"1":[ //同步副本组brokerId列表
101,
103
],
"0":[
103,
102
]
}
}

partition状态信息

/brokers/topics/[topic]/partitions/[0…N] 其中[0…N]表示partition索引号
/brokers/topics/[topic]/partitions/[partitionId]/state

Kafka在zookeeper中存储的信息_时间戳_03

{
"controller_epoch":33, //表示kafka集群中的中央控制器选举次数
"leader":102, //表示该partition选举leader的brokerId
"version":1, //版本编号默认为1
"leader_epoch":8, // 该partition leader选举次数,
"isr":[ // 同步副本组brokerId列表
102,
103
]
}

2.Broker注册信息

/brokers/ids/[0…N]

每个broker的配置文件中都需要指定一个数字类型的id(全局不可重复),此节点为临时znode(EPHEMERAL)
Kafka在zookeeper中存储的信息_时间戳_04

{
"listener_security_protocol_map":{
"PLAINTEXT":"PLAINTEXT"
},
"endpoints":[
"PLAINTEXT://zjj101:9092"
],
"jmx_port":-1, // jmx端口号
"host":"zjj101", // 主机名或ip地址,
"timestamp":"1614570663881", //kafka broker初始启动时的时间戳,
"port":9092, // kafka broker的服务端端口号,由server.properties中参数port确定
"version":4 // 版本编号默认为1,
}

3.Controller epoch

/controller_epoch --> int (epoch)

此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1;
Kafka在zookeeper中存储的信息_端口号_05

4.Controller注册信息

/controller -> int (broker id of the controller) 存储center controller中央控制器所在kafka broker的信息
Kafka在zookeeper中存储的信息_kafka_06

{
"version":1, // 版本编号默认为1,
"brokerid":101, // kafka集群中broker唯一编号,
"timestamp":"1614570663255" // kafka broker中央控制器变更时的时间戳
}