Zookeeper简介、两大核心概念以及节点操作
1、Zookeeper简介
1.1、什么是Zookeeper
它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同 步服务、集群管理、分布式应用配置项的管理等。
2、Zookeeper两大核心概念
Zookeeper有两大核心概念,文件系统数据结构+监听通知机制。
2.1、文件系统数据结构
Zookeeper的文件系统数据结构大致如下所示:
上面的这些节点我们称之为znode(目录节点),和windows的文件夹类似,我们可以随意的去增加、删除znode,znode节点有以下几种类型。
1、PERSISTENT持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,它将永远存在。
2、 PERSISTENT_SEQUENTIAL持久化顺序编号目录节点
也就是持久化目录节点,不过比持久化目录节点多了一个顺序编号。
3、EPHEMERAL临时目录节点
客户端与zookeeper断开连接后,该节点被删除。
4、EPHEMERAL_SEQUENTIAL临时顺序编号目录节点
也就是临时节点,不过比临时节点多了一个顺序编号。
5、Container 节点
3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认 60s 检查一次。
6、TTL 节点
默认禁用,只能通过系统配置 -Dzookeeper.extendedTypesEnabled=true 开启,不稳定,意思是就算到了TTL的时间,还是要看定时任务的执行情况。配置的地方为 zoo.cfg 文件,如下图所示:
2.2、监听通知机制
客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点。
1、如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知。
2、如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知。
3、如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。
注意:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触 发一次。
3、Zookeeper节点操作
3.1、Zookeeper指令帮助
在进入客户端的时候,我们可以输入help指令去看所有的zk操作指令,如下图所示:
3.2、创建节点命令详解
创建节点是这条命令,create [-s] [-e] [-c] [-t ttl] path [data] [acl]
下面对参数先做一些说明
参数 | 含义 |
---|---|
-s | 代表即将创建顺序节点 |
-e | 代表即将创建临时节点 |
-c | 代表即将创建容器节点 |
-t ttl | 可以给节点添加过期时间,默认禁用,需要通过系统参数启用 |
path | 创建节点的路径,必须是全路径 |
data | 节点保存的数据 |
acl | 控制权限,控制哪个用户可以访问 |
3.3、节点操作示例
// 创建一个有序的持久化节点
create -s /persis
// 创建一个持久化节点
create /persisor
// 获取节点
get /persisor
// 给节点写数据
set /persisor ppp
// 查看节点状态信息
stat /persisor
如下图所示:
3.4、节点状态参数详解
当输入stat命令时,打印出的节点信息字段详解
参数 | 含义 |
---|---|
cZxid | 创建znode的事务ID(Zxid的值) |
ctime | 最后修改znode的事务ID |
mZxid | 最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变) |
mtime | znode创建时间 |
pZxid | znode最近修改时间 |
cversion | znode的当前数据版本 |
dataVersion | znode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个 版本) |
aclVersion | 表示对此znode的acl版本 |
ephemeralOwner | znode是临时znode时,表示znode所有者的 session ID。 如果 znode不是临时znode,则该字段设置为零 |
dataLength | znode数据字段的长度 |
numChildren | znode的子znode的数量 |
4、事件监听机制扩展
前面核心概念的时候讲解了事件监听机制的概念,下来进行详解和操作。
事件监听机制就是:事件监听一旦被加上,当节点发生变化时,服务端会给相应的客户端发出一个节点变化的通知。
4.1、针对节点的监听
一旦事件触发,对应的注册立刻被删除,所以事件监听是一次性的。
get ‐w /path // 注册监听的同时获取数据
stat ‐w /path // 对节点进行监听,且获取元数据信息
get ‐w /path 如下图所示:
stat ‐w /path 如下图所示:
4.2、针对路径的监听
ls -w /path // 注册监听
这是对单个路径的监听,也是一次性的。
ls -R -w /test
对当前路径下所有的节点都加一个监听,相当于一次性加了多个监听,但是监听都是一次性的。
5、Zookeeper应用场景
1、分布式配置中心
2、分布式注册中心
3、分布式锁
4、分布式队列
5、集群选举
6、分布式屏障
7、发布/订阅