资讯专栏INFORMATION COLUMN

一图全解Kafka在zookeeper中的数据结构

SunZhaopeng / 2293人阅读

摘要:管控平台推荐使用滴滴开源的运维管控平台戳我呀更符合国人的操作习惯更强大的管控能力更高效的问题定位能力更便捷的集群运维能力更专业的资源治理更友好的运维生态大家好我是石臻臻这是专栏连载中的第篇文章首发一图全解在中的数据结构

kafka管控平台推荐使用 滴滴开源 Kafka运维管控平台(戳我呀) 更符合国人的操作习惯 更强大的管控能力 更高效的问题定位能力 更便捷的集群运维能力 更专业的资源治理 更友好的运维生态

大家好,我是石臻臻,这是 「kafka专栏」 连载中的第「10」篇文章…

首发: 一图全解Kafka在zookeeper中的数据结构

一图知全貌

/cluster

/cluster/id 持久数据节点

集群ID
当第一台Broker启动的时候, 发现/cluster/id不存在,那么它就会把自己的cluster.id配置写入zk; 标记当前zk是属于集群哪个集群; 后面其他的Broker启动的时候会去获取该数据, 如果发现数据跟自己的配置不一致; 则抛出异常,加入的不是同一个集群;
数据示例:{"version":"1","id":"0"}

/controller_epoch 持久数据节点

Controller选举次数;

/Controller 临时数据节点

当前Controller角色的BrokerId,数据示例:
{"version":1,"brokerid":0,"timestamp":"1624415590383"}
删除该节点立马触发重新选举

/log_dir_event_notification

zk的数据中有一个节点/log_dir_event_notification/,这是一个序列号持久节点
这个节点在kafka中承担的作用是: 当某个Broker上的LogDir出现异常时(比如磁盘损坏,文件读写失败,等等异常): 向zk中谢增一个子节点/log_dir_event_notification/log_dir_event_序列号 ;Controller监听到这个节点的变更之后,会向Brokers们发送LeaderAndIsrRequest请求; 然后做一些副本脱机的善后操作
详情请看 【kafka源码】/log_dir_event_notification的LogDir脱机事件通知

/isr_change_notification/log_dir_event_{序列号}

当Isr有变更的时候,会写入这个节点Controller监听变更

/admin

/admin/delete_topics 待删除Topic

/admin/delete_topics/{topicName} 持久节点,待删除Topic

存在此节点表示 当前Topic需要被删除

/admin/reassign_partitions 持久数据节点

如果有此节点,表示当前正在进行数据迁移,里面的数据就是正在迁移的配置
示例数据:

/brokers

/brokers/seqid

/brokers/seqid: 全局序列号
里面没有数据,主要是用了节点的dataVersion信息来当全局序列号

在kafka中的作用: 自动生成BrokerId
主要是用来自动生成brokerId;
一个集群如果特别大,配置brokerId的时候不能重复,一个个设置比较累; 可以让Broker自动生成BrokerId

server.properties 配置

## 设置Brokerid能够自动生成broker.id.generation.enable=true## 设置BrokerId<0 (如果>=0则以此配置为准)broker.id=-1## 自动生成配置的起始值reserved.broker.max.id=20000

BrokerId计算方法

brokerId = {reserved.broker.max.id} +/brokers/seqid.dataVersion

每次想要获取/brokers/seqid的dataVersion值的时候都是用 set方法,set的时候会返回version数据,并不是get;每次set这个节点数据,版本信息就会自增;所以就实现了全局自增ID了;

/brokers/ids/{id} 临时数据节点 : 在线BrokerID

在线的Broker都会在这里注册一个节点; 下线自动删除

/brokers/topics/{topicName}持久数据节点

存储 topic的分区副本分配信息
例如:{"version":1,"partitions":{"0":[0]}}

/brokers/topics/{topicName}/{分区号}/state 持久数据节点

存储指定分区的leaderisr等信息
例如:{"controller_epoch":203,"leader":0,"version":1,"leader_epoch":0,"isr":[0]}


你好,我是石臻臻,工作8年的互联网老兵,丰富的开发和管理经验, 现在任职于「 滴滴技术专家 」岗位,从事开源建设工作,公众号讲解 Java/中间件/大数据 等技术栈相关内容,欢迎关注石臻臻,进滴滴 「 高质量 」 「 滴滴开源技术答疑群 」 , 群内每周技术专家轮流值班答疑,加石臻臻微信交个朋友,交流交流技术分享分享生活

可帮忙 「 内推 」一二线大厂

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119523.html

相关文章

  • kafka-0.11集群部署

    摘要:在机器上创建,并设置为与配置文件里面对应。它支持管理多个集群选择副本副本重新分配以及创建。进入页面网址添加添加集群成功后,点击进去,界面如下添加 环境 Zookeeper集群:172.16.218.201、172.16.218.202、172.16.218.203172.16.218.201 kafka1172.16.218.202 kafka2172.16.218.203 ka...

    kohoh_ 评论0 收藏0
  • kafka分布式消息平台的初探

    摘要:介绍是一个分布式的流数据平台,可发布订阅消息流,使用进行集群管理。启动一个,拉取消息参数表示从头开始读取数据,如果不设置,则只读取最新的数据。消息发布者,方式,负责发布消息到。表明消息,被同一内的均分了。 介绍 Kafka是一个分布式的流数据平台,可发布、订阅消息流,使用zookeeper进行集群管理。也可作为一个消息队列中间件,类似于RabbitMQ,ActiveMQ,ZeroMQ等...

    zsy888 评论0 收藏0
  • kafka分布式消息平台的初探

    摘要:介绍是一个分布式的流数据平台,可发布订阅消息流,使用进行集群管理。启动一个,拉取消息参数表示从头开始读取数据,如果不设置,则只读取最新的数据。消息发布者,方式,负责发布消息到。表明消息,被同一内的均分了。 介绍 Kafka是一个分布式的流数据平台,可发布、订阅消息流,使用zookeeper进行集群管理。也可作为一个消息队列中间件,类似于RabbitMQ,ActiveMQ,ZeroMQ等...

    luckyw 评论0 收藏0
  • KafKa集群部署手册

    摘要:对消息保存时根据进行归类,发送消息者成为消息接受者成为此外集群有多个实例组成,每个实例成为。无论是集群,还是和都依赖于来保证系统可用性集群保存一些信息。 1 简介 1.1 简介 Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JM...

    lmxdawn 评论0 收藏0
  • Kafka学习笔记之扫盲

    摘要:相关概念协议高级消息队列协议是一个标准开放的应用层的消息中间件协议。可以用命令与不同,不是线程安全的。手动提交执行相关逻辑提交注意点将写成单例模式,有助于减少端占用的资源。自身是线程安全的类,只要封装得当就能最恰当的发挥好的作用。 本文使用的Kafka版本0.11 先思考些问题: 我想分析一下用户行为(pageviews),以便我能设计出更好的广告位 我想对用户的搜索关键词进行统计,...

    GT 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<