Zookeeper 主要用来跟踪Kafka 集群中的节点状态, 以及Kafka Topic, message 等等其余信息. 同时, Kafka 依赖于Zookeeper, 没有Zookeeper 是不能运行起来Kafka 的. node
该图片盗自大牛的博客:http://blog.csdn.net/lizhitao/article/details/23744675shell
在ZK 的监视端, 运行ls /
, 能够列出全部的顶级节点, 主要包含如下的节点:服务器
经过字面意思可以理解其记录的内容. 须要说明的是isr_change_notification 节点. 在Kafka 中, Leader 和Follower 的数据同步遵循的是"最终一致"原则, 也就是数据同步会有延迟, 但保证最终数据的一致性.session
isr 是'in-sync' replicas 的缩写, 表明的是与Leader 数据已经经过过的replica, 它会做为重选Leader 时做为判断依据.工具
2.1 kafka自带zookeeper测试
进入kafka的bin目录,执行如下命令:ui
[root@localhost bin]# ./zookeeper-shell.sh 172.16.10.91:2181,172.16.10.92:2181,172.16.10.93:2181
2.2 独立安装zookeeperspa
服务端开启的状况下,进入客户端的命令:.net
{zookeeper目录}/bin/zkCli.sh
(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.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", ... } }
离开了Zookeeper, Kafka 不能对Topic 进行新增操做, 可是仍然能够produce 和consume 消息.
PS: 在运行过程当中, 若是先关闭掉了Zookeeper, 而后再去关闭Kafka, 会发现Kafka 后台一直结束不掉, 这是由于Kafka 会被block 在与Zookeeper 的重连过程当中. 解决方法是重启Zookeeper , 而后先关闭Kafka 再关闭Zookeeper.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
补充参考:
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
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