Zookeeper 主要用来跟踪Kafka 集群中的节点状态, 以及Kafka Topic, message 等等其他信息. 同时, Kafka 依赖于Zookeeper, 没有Zookeeper 是不能运行起来Kafka 的.

  • Controller 选举:

    • Controller 是一个特殊的Broker, 其负责所有Partition 的leader/follower 关系.
    • Zookeeper 负责从Broker 中选举出一个作为Controller, 并确保其唯一性. 同时, 当Controller 宕机时, 选举一个新的.
  • 集群 membership:
    • 记录集群中都有哪些活跃着的Broker.
  • Topic 配置:
    • 有哪些Topic, Topic 都有哪些Partition, Replica 存放在哪里, Leader 是谁.
  • 配额(0.9.0+):
    • 记录每个客户能够读写的数据量.
  • ACLs(0.9.0+):
    • 记录对Topic 的读写控制.

1、kafka的ZooKeeper存储结构

  该图片盗自大牛的博客:http://blog.csdn.net/lizhitao/article/details/23744675

  在ZK 的监视端, 运行ls / , 可以列出所有的顶级节点, 主要包含以下的节点:

  • cluster.
  • brokers.
  • controller.
  • consumer.
  • config.
  • isr_change_notification.

  通过字面意思能够理解其记录的内容. 需要说明的是isr_change_notification 节点. 在Kafka 中, Leader 和Follower 的数据同步遵循的是"最终一致"原则, 也就是数据同步会有延迟, 但保证最终数据的一致性.

  isr 是'in-sync' replicas 的缩写, 代表的是与Leader 数据已经通过过的replica, 它会作为重选Leader 时作为判断依据.

2、连接ZooKeeper

  2.1 kafka自带zookeeper

  进入kafka的bin目录,执行以下命令:

[root@localhost bin]# ./zookeeper-shell.sh 172.16.10.91:2181,172.16.10.92:2181,172.16.10.93:2181

  2.2 独立安装zookeeper

  服务端开启的情况下,进入客户端的命令:

{zookeeper目录}/bin/zkCli.sh

3、常用命令

(1)查看数据:ls, ls2

  【ls】会显示该节点下的子节点信息

  例如:【ls /】:显示zookeeper根目录下的子节点

  例如:【ls /brokers/ids】:显示集群中的Broker列表

  

  【ls2】命令会显示该节点的子节点信息和属性信息

  例如:【ls2 /brokers/topics/cwx】:显示cwx主题的子节点信息和属性信息

  

(2)获取数据:get

  get 命令会显示该节点的节点数据内容和属性信息

  例如:【get /brokers/topics/topic-01】:可以获取topic-01 主题的值

  可以看出, 该Topic 只有一个Partition

  例如:【get /brokers/topics/topic-01/partitions/0/state】:获取Topic Partition 的信息

  可以看出, 该Topic 有3个replica, 而且当前状态都是isr(也就是已处于最新状态). 同时, 当前的Leader 是Broker 0.

(3)获取数据:rmr

  rmr 命令删除指定路径的节点

  例如:【rmr /brokers/topics/test】:删除test主题

4、主要节点信息描述

  4.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],
}
}

  4.2 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]
}

  4.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": 6061,
"timestamp":"1403061899859"
"version": 1,
"host": "192.168.1.148",
"port": 9092
}

  4.4 Controller epoch

  命令:/controller_epoch -> int (epoch)

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

  4.5 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"
}

  4.6 Consumer offset

  命令:/consumers/[groupId]/offsets/[topic]/[partitionId] -> long (offset)

  用来跟踪每个consumer目前所消费的partition中最大的offset,此znode为持久节点,可以看出offset跟group_id有关,以表明当消费者组(consumer group)中一个消费者失效,重新触发balance,其他consumer可以继续消费。

  4.7 删除topics

  命令:/admin/delete_topics

Schema:
{ "fields":[ {"name": "version", "type": "int", "doc": "version id"},{"name": "topics","type": { "type": "array", "items": "string", "doc": "an array of topics to be deleted"}} ]
}例子:
{"version": 1,"topics": ["foo", "bar"]
}

  4.8 Topic配置

  命令:/config/topics/[topic_name]

{"version": 1,"config": {"config.a": "x","config.b": "y",...}
}

5、关闭Leader

6、关闭Zookeeper

7、特别注意事项

  离开了Zookeeper, Kafka 不能对Topic 进行新增操作, 但是仍然可以produce 和consume 消息.

  PS: 在运行过程中, 如果先关闭掉了Zookeeper, 然后再去关闭Kafka, 会发现Kafka 后台一直结束不掉, 这是因为Kafka 会被block 在与Zookeeper 的重连过程中. 解决方法是重启Zookeeper , 然后先关闭Kafka 再关闭Zookeeper.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

补充参考:

1、命令行工具的一些简单操作如下:

1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
6. 删除文件: delete /zk 将刚才创建的 znode 删除
7. 退出客户端: quit
8. 帮助命令: help

2、ZooKeeper 常用四字命令:

ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
4. echo kill | nc 127.0.0.1 2181 ,关掉server
5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

参考:

http://blog.csdn.net/lizhitao/article/details/23744675

转载于:https://www.cnblogs.com/caoweixiong/p/11076438.html

Kafka在zookeeper中存储结构和查看方式相关推荐

  1. kafka在zookeeper中存储结构

    1.topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 Schema: {     "version": ...

  2. Kafka在ZooKeeper中的应用

    以下是kafka在zookeep中的详细存储结构图: 1.Broker注册 Kafka是一个分布式的消息系统.Kafka 集群包含一个或多个服务器,服务器节点称为broker.虽然Broker是分布式 ...

  3. 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 ...

  4. 查看Windows凭据和普通凭据的密码(查看Windows中存储的密码)——mimikatz

    使用mimikatz进行Windows中存储的密码查看 查看Windows为你管理的凭据 路径:控制面板\所有控制面板项\凭据管理器 软件下载 https://github.com/gentilkiw ...

  5. Kubernetes 搭建 Kafka 和 Zookeeper 集群(完整教程)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  6. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  7. 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...

  8. 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列

    https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html 向作者提问 毕业于 C9 高校,硕士学历,曾在 IEEE ITS.VSD 等 ...

  9. kafka 、 zookeeper 集群(一)

    一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同 ...

最新文章

  1. linux如何查看系统架构?(查看系统架构命令)(armv7l)
  2. 系统调用回答为什么要用buffer写
  3. 再过五分钟,你就懂Oracle的数据库对象了
  4. win10配置JAVA和tomacat环境变量
  5. adb 抓取日志到指定文件,文件命名为当前电脑时间
  6. mysql 手动配置服务器_Win7系统下手动配置Apache+PHP+MySQL环境WEB服务器 -电脑资料...
  7. 企业实战案例02_Jenkins_连接远程GitLab拉取代码
  8. 神经网络的基本工作原理
  9. 高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)...
  10. c语言改变cmd 字体大小_嵌入式开发中常见3个的C语言技巧
  11. 关于Mathematica 的cdf 文件的嵌入应用
  12. 角色 RESOURCE、CONNECT、DBA具有的权限
  13. Asp.Net SignalR 集群会遇到的问题
  14. 结构体与对象的联系与区别
  15. centos修改键盘布局
  16. 【OI好题推荐 #1】洛谷-P1183 多边形的面积
  17. linux学习-执行cp命令时略过目录
  18. iPhone手机必备宝藏APP
  19. 去中心化和中心化哪个才是未来,Dex.top教你熊市生存指南
  20. 找不到apt和vim命令

热门文章

  1. 上海亚商投顾:市场呈现窄幅震荡 新能源类行业受热炒
  2. Redis精通系列——Stream
  3. 深度学习-Resolution-robust Large Mask Inpainting with Fourier Convolutions基于傅里叶卷积的对分辨率鲁棒的掩模修复
  4. scss混合器实现全局更换主题以及相关背景图
  5. Linux基金会:开源就业的最新趋势和最需要的技能
  6. 热词解析:“脑残”英语怎么说?
  7. 【生动理解】深度学习中常用的各项评价指标含义TP、FP、TN、FN、Accuracy、Recall、IoU、mIoU
  8. 【Web技术】1154- 现代 Web 研发体系中的新一代低/零码搭建
  9. 一年级课程表(3月7日-3月11日)
  10. Clickhouse副本的特性