当前位置: 首页 > 科技观察

一张Kafka在Zookeeper中的数据结构图

时间:2023-03-11 20:53:14 科技观察

kafka_2.8.0之前,Kafka仍然需要依赖zookeeper来运行。Kafka中的很多数据都存储在zk中,比如“Broker注册信息”、“Topic信息”、“运维操作的临时信息”、“配置信息”等信息。下面我们用一张图窥探一下zookeeper中kafka的全貌。推荐收藏!!!一张图是kafka在zookeeper中的全貌数据结构1/cluster01-/cluster/id持久化数据节点clusterID当第一个Broker启动时,如果发现/cluster/id不存在,就会写入自己的cluster.id配置到zk;标记当前zk属于哪个集群;其他Broker在后面启动的时候会去获取数据,如果发现数据和自己的配置不一致;抛出异常,加入的不是同一个集群;数据示例:{"version":"1","id":"0"}2/controller_epoch持久化数据节点Controller选举次数;3/Controller当前Controller角色的临时数据节点BrokerId,数据示例:{"version":1,"brokerid":0,"timestamp":"1624415590383"}删除该节点立即触发重选4/log_dir_event_notificationzk数据包含一个节点/log_dir_event_notification/,这是一个序列号持久化节点。这个节点在Kafka中的作用是:当某个Broker上的LogDir出现异常时(比如磁盘损坏,文件读写失败等):发送给zk添加一个新的子节点/log_dir_event_notification/log_dir_event_serialnumber;Controller监听到这个节点的变化后,会向Brokers发送LeaderAndIsrRequest请求;当Isr发生变化时,会写入到本节点Controller中,监听变化6/admin01-/admin/delete_topics/{topicName}持久化节点,如果要删除的topic存在于本节点中,说明当前topic需要待删除02-/admin/reassign_partitions持久化数据节点如果有这个节点,说明当前正在进行数据迁移,里面的数据就是正在迁移的配置样本数据:7/brokers01-/brokers/seqid/brokers/seqid:有全局序号中没有数据,主要是利用节点的dataVersion信息作为kafka中全局序号的作用:自动生成BrokerId,主要用于自动生成brokerId;如果一个集群特别大,配置brokerId的时候不能重复,每次设置都很累;Broker可以自动生成GenerateBrokerIdserver.properties配置##设置Brokerid自动生成broker.id.generation.enable=true##设置BrokerId<0(如果>=0,以这个配置为准)broker.id=-1##自动生成配置reserved.broker.max.id=20000BrokerId计算方法的起始值brokerId={reserved.broker.max.id}+/brokers/seqid.dataVersion每次要获取的dataVersion值都会用到/brokers/seqidset方法,set时会返回版本数据,get时不会返回;每次设置节点数据,版本信息都会自动增加;这样就实现了全局自增ID;02-/brokers/ids/{id}临时数据节点:OnlineBrokerIDOnlineBroker会在这里注册一个节点;offline会自动删除03-/brokers/topics/{topicName}持久化数据节点存储topic的分区副本分配信息例如:{"version":1,"partitions":{"0":[0]}}/brokers/topics/{topicName}/{partitionnumber}/state持久化数据节点存储指定分区的leader、isr等信息。例如:{"controller_epoch":203,"leader":0,"version":1,"leader_epoch":0,"isr":[0]}本文转载自微信公众号“石珍珍的杂货店”,转载文章可通过以下二维码关注,转载请联系石珍珍的杂货店公众号。