Kafka在zookeeper中的存储结构

image.png

1.topic注册信息

/brokers/topics/[topic] :

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

image.png

每个topic的信息

  1. {
  2. "version":1, // 版本编号目前固定为数字1
  3. "partitions":{ // partitionId编号
  4. "1":[ //同步副本组brokerId列表
  5. 101,
  6. 103
  7. ],
  8. "0":[
  9. 103,
  10. 102
  11. ]
  12. }
  13. }

partition状态信息

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

image.png

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

2.Broker注册信息

/brokers/ids/[0…N]

每个broker的配置文件中都需要指定一个数字类型的id(全局不可重复),此节点为临时znode(EPHEMERAL)
image.png

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

3.Controller epoch

/controller_epoch —> int (epoch)

此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1;
image.png

4.Controller注册信息

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

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