跟我学Kafka之zookeeper的存储结构
一、zookeeper存储结构总图
当我们kafka启动运行以后,就会在zookeeper上初始化kafka相关数据,主要包括六大类:
- consumers
- admin
- config
- controller
- brokers
- controller_epoch
1、brokers节点结构说明
1.1 topic信息结构
/brokers/topics/[topic] :
存储某个topic的partitions所有分配信息:
Schema:
{"version": "版本编号目前固定为数字1","partitions": {"partitionId编号": [同步副本组brokerId列表],"partitionId编号": [同步副本组brokerId列表],.......}
}Example:
{
"version": 1,
"partitions": {
"0": [1, 2],
"1": [2, 1],
"2": [1, 2],
}
}
1.2 partitions信息
/brokers/topics/[topic]/partitions/[0...N] 其中[0..N]表示partition索引号
/brokers/topics/[topic]/partitions/[partitionId]/state
Schema:
{
"controller_epoch": 表示kafka集群中的中央控制器选举次数,
"leader": 表示该partition选举leader的brokerId,
"version": 版本编号默认为1,
"leader_epoch": 该partition leader选举次数,
"isr": [同步副本组brokerId列表]
}Example:
{
"controller_epoch": 1,
"leader": 2,
"version": 1,
"leader_epoch": 0,
"isr": [2, 1]
}
1.3 broker信息
/brokers/ids/[0...N]
每个broker的配置文件中都需要指定一个数字类型的id(全局不可重复),此节点为临时znode(EPHEMERAL)
Schema:
{
"jmx_port": jmx端口号,
"timestamp": kafka broker初始启动时的时间戳,
"host": 主机名或ip地址,
"version": 版本编号默认为1,
"port": kafka broker的服务端端口号,由server.properties中参数port确定
}Example:
{
"jmx_port": 5051,"timestamp":"1403061000000"
"version": 1,
"host": "127.0.0.1",
"port": 8081
}
2、Controller_epoch
/controller_epoch -> int (epoch)
此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller(中央控制器)所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1;
3、Controller信息
/controller -> int (broker id of the controller)
存储center controller(中央控制器)所在kafka broker的信息。
Schema:
{
"version": 版本编号默认为1,
"brokerid": kafka集群中broker唯一编号,
"timestamp": kafka broker中央控制器变更时的时间戳
}Example:{
"version": 1,
"brokerid": 3,
"timestamp": "1403061802981"
}
这个的意思就说明,当前的Controller所在的Broker机器是哪台,变更时间是多少等。
4、Consumer信息
/consumers/[groupId]/ids/[consumerIdString]
每个consumer都有一个唯一的ID(consumerId可以通过配置文件指定,也可以由系统生成),此id用来标记消费者信息。
Schema:
{
"version": 版本编号默认为1,
"subscription": { //订阅topic列表},
"topic名称": consumer中topic消费者线程数
"pattern": "static",
"timestamp": "consumer启动时的时间戳"
}
4.1 Consumer offset信息
/consumers/[groupId]/offsets/[topic]/[partitionId] -> long (offset)
用来跟踪每个consumer目前所消费的partition中最大的offset。此znode为持久节点,可以看出offset跟group_id有关,以表明当消费者组(consumer group)中一个消费者失效,重新触发balance,其他consumer可以继续消费。
跟我学Kafka之zookeeper的存储结构相关推荐
- Kafka在zookeeper中存储结构和查看方式
Zookeeper 主要用来跟踪Kafka 集群中的节点状态, 以及Kafka Topic, message 等等其他信息. 同时, Kafka 依赖于Zookeeper, 没有Zookeeper 是 ...
- kafka在zookeeper中存储结构
1.topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 Schema: { "version": ...
- 《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分
<Linux就该这么学>培训笔记_ch06_存储结构与磁盘划分 文章最后会post上书本的笔记照片. 文章主要内容: Linux系统的文件存储结构(FHS标准) 物理设备命名规则(udev ...
- 《Linux就该这么学》 第6章 存储结构与磁盘划分
6.1 一切从"/"开始Linux系统中的一切文件都是从"根(/)"目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用 ...
- Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.1.244:2181,192.168.1.245:2181,192.168.1.246 ...
- kafka 、 zookeeper 集群(一)
一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同 ...
- 基于 Kafka 和 ZooKeeper 的分布式消息队列原理
转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...
- 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理
关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...
- 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html 向作者提问 毕业于 C9 高校,硕士学历,曾在 IEEE ITS.VSD 等 ...
- 跟我学Kafka源码Producer分析
2019独角兽企业重金招聘Python工程师标准>>> 跟我学Kafka源码Producer分析 博客分类: MQ 本章主要讲解分析Kafka的Producer的业务逻辑,分发逻辑和 ...
最新文章
- 导航菜单:jQuery粘性滚动导航栏效果
- 2016年第7本:非暴力沟通
- html文件头部固定代码
- Docker/Docker 起步123
- 微信公众号回调java_处理微信公众号消息回调
- python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...
- 扩展Kubernetes API
- 初学者,学习vue应该从何下手?
- 神经网络入门之RNN(三)
- 毕向东java笔记ppt,毕向东java学习笔记.doc
- 14届数独-真题标准数独-Day 4-20220119
- 小程序的宿主环境-宿主环境简介
- zotero如何用markdown记笔记
- HTML/XML转义字符对照表ASCII码对照表
- 拉格朗日乘子法(Lagrange Multiplier)详解以及乘子lambda的意义
- mysql连接校对_mysql字符集和校对规则(Mysql校对集)
- Windows定时自动执行bat脚本命令
- Powershell批量修改用户的UPN后缀
- 蓝牙扫描枪v-model双向数据绑定缓慢,改为原生input输入的方式——基础积累
- 人工智能发展飞速,未来几十年哪些职业会被逐渐取代,这些专业还值得选择吗?
热门文章
- IOS开发--第三阶段--微博(1)文档
- PHP笔记(CSS篇)
- VS2010 winform程序发布步骤
- 求出字符“2013-9-8”与“2013-10-1”相差的天数
- [强烈推荐]Oracle:只有rman备份(数据,参数,日志,控制文件全丢失)的恢复
- 监控摄像头GB28181转RTMP、FLV、HLS、RTSP多种格式实现网页嵌入播放
- ubuntu18.04新体验
- 【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别(转)
- Python内置函数(55)——globals
- Spring使用经验之Listener综述