【路径】
1:Zookeeper的数据结构
2:节点的分类
- 持久性
- 临时性
3:客户端命令(创建、查询、修改、删除)
4:Zookeeper的java的api介绍(创建、查询、修改、删除)
5:Zookeeper的watch机制
- NodeCache
- PathChildrenCache
- TreeCache
【讲解】
3.1、zookeeper数据结构
ZooKeeper 的数据模型是层次模型。层次模型常见于文件系统。例如:我的电脑可以分为多个盘符(例如C、D、E等),每个盘符下可以创建多个目录,每个目录下面可以创建文件,也可以创建子目录,最终构成了一个树型结构。通过这种树型结构的目录,我们可以将文件分门别类的进行存放,方便我们后期查找。而且磁盘上的每个文件都有一个唯一的访问路径,例如:C:\Windows\itcast\hello.txt。
层次模型和key-value 模型是两种主流的数据模型。ZooKeeper 使用文件系统模型主要基于以下两点考虑:
-
文件系统的树形结构便于表达数据之间的层次关系。
-
文件系统的树形结构便于为不同的应用分配独立的命名空间(namespace 路径url)。
ZooKeeper 的层次模型称作data tree。Datatree 的每个节点叫作znode(Zookeeper node)。不同于文件系统,每个节点都可以保存数据。每个节点都有一个版本(version)。版本从0 开始计数。
如图所示,data tree中有两个子树,用于应用1( /app1)和应用2(/app2)。
每个客户端进程pi 创建一个znode节点 p_i 在 /app1下, /app1/p_1就代表一个客户端在运行。
3.2、节点的分类【重点】
一:一个znode可以是持久性的,也可以是临时性的
-
持久性znode[PERSISTENT],这个znode一旦创建不会丢失,无论是zookeeper宕机,还是client宕机。
-
临时性的znode[EPHEMERAL],如果zookeeper宕机了,或者client在指定的timeout时间内没有连接server,都会被认为丢失。 -e
二:znode也可以是顺序性的,每一个顺序性的znode关联一个唯一的单调递增整数。这个单调递增整数是znode名字的后缀。
-
持久顺序性的znode(PERSISTENT_SEQUENTIAL):znode 处理具备持久性的znode的特点之外,znode的名称具备顺序性。 -s
-
临时顺序性的znode(EPHEMERAL_SEQUENTIAL):znode处理具备临时性的znode特点,znode的名称具备顺序性。-s
3.2、客户端命令
3.2.1、查询所有命令
help
3.2.2、查询跟路径下的节点
ls /zookeeper
查看zookeeper节点
3.2.3、创建普通永久节点
create /app1 "helloworld"
创建app1节点,值为helloworld
3.2.4、创建带序号永久节点
create -s /hello "helloworld"
3.2.5、创建普通临时节点
create -e /app3 'app3'
-e:表示普通临时节点
关闭客户端,再次打开查看 app3节点消失
3.2.6、创建带序号临时节点
create -e -s /app4 'app4'
-e:表示普通临时节点
-s:表示带序号节点
关闭客户端,再次打开查看 app4节点消失
3.2.7、查询节点数据
get /app1
# 节点的状态信息,也称为stat结构体
# 创建该znode的事务的zxid(ZooKeeper Transaction ID)
# 事务ID是ZooKeeper为每次更新操作/事务操作分配一个全局唯一的id,表示zxid,值越小,表示越先执行
cZxid = 0x4454 # 0x0表示十六进制数0
ctime = Thu Jan 01 08:00:00 CST 1970 # 创建时间
mZxid = 0x4454 # 最后一次更新的zxid
mtime = Thu Jan 01 08:00:00 CST 1970 # 最后一次更新的时间
pZxid = 0x4454 # 最后更新的子节点的zxid
cversion = 5 # 子节点的变化号,表示子节点被修改的次数
dataVersion = 0 # 表示当前节点的数据变化号,0表示当前节点从未被修改过
aclVersion = 0 # 访问控制列表的变化号 access control list
# 如果临时节点,表示当前节点的拥有者的sessionId
ephemeralOwner = 0x0 # 如果不是临时节点,则值为0
dataLength = 13 # 数据长度
numChildren = 1 # 子节点的数量
3.2.8、修改节点数据
set /app1 'hello'
3.2.9、删除节点
delete /hello0000000006
3.2.10、递归删除节点
delete /hello
rmr /hello
3.2.11、查看节点状态
stat /zookeeper
3.4.12、日志的可视化
- 这是日志的存储路径
为了能正常查看日志,把查看日志需要的jar包放到统一路径下
- 使用命令可以直接查看正常日志
java -classpath ".;*" org.apache.zookeeper.server.LogFormatter log.1
小结: 路径必须以/打头
ls 查看
help查看所有命令
create 路径 数据 -s 代表有序 -e 代临时
get 路径 查询
set 路径 新的数据
delete 路径 单一路径,没有子节点
rmr 路径 递归删除
stat 路径 查看节点状态 没有数据显示
日志 配置日志存储路径,依赖2个zookeeper-xxx.jar, sfl4-api.jar
java -classpath “.;*” org.apache.zookeeper.server.LogFormatter log.1