zk数据结构
- ZK数据结构(类似于文件系统)
- 每个节点在zk中叫做znode,并且其有一个唯一的路径标识
- 节点znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解)
zk节点类型
5. znode有两种类型:
短暂(ephemeral
)临时,断开连接时删除)
持久(persistent
)(持久,断开连接时不删除)
- Znode有四种形式的目录节点(默认是persistent):
PERSISTENT (持久的节点)
PERSISTENT_SEQUENTIAL(znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护)
EPHEMERAL (临时的,注册的客户端断开连接就会删除节点,临时节点不允许有子节点)
EPHEMERAL_SEQUENTIAL (临时节点,命名规则同上) - 创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
- 在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
zk命令行操作
注意: 使用 jps 可以查看zk 的启动情况
运行zkCli.sh –server <ip>
进入命令行工具,注意连接信息应该为zoo.cfg
中配置的主机名
或者ip
注意:ip不存在的情况下,默认当前机器,此命令可以连接
zookeeper
集群下的任意
机器
-
创建节点
-
create [-s] [-e] path data acl
其中,-s或-e 分别指定节点的特性,顺序或临时节点,若不指定,则表示持久节点,acl用来权限控制
1 . 创建顺序节点:
create -s /test 123
2 . 创建临时节点:
create -e /test 123tmp
注意:
1 . 临时节点下面无法创建永久节点
2 . 同一节点下创建的节点是在本节点下依次排序的
- 读取节点
ls
和 get
,ls命令可以列出zk制定接地单下的所有子节点,只能查看指定节点的第一级的所有子节点
,get命令可以获取zk指定节点的数据内容和属性信息。
-
ls path [watch]
-
get path [watch]
-
ls2 path [watch]
-
更新节点
-
set path data [version]
data 就是要更新的新内容,version表示数据版本。
更新完之后,查看 dataVersion
已经变成为1了,标识进行了更新。
-
删除节点
-
delete path [version]
若删除的节点存在子节点,那么无法删除该节点,必须先删除子节点再删除父节点
-
Rmr path
可以递归删除节点 -
对节点增加限制
-
setquota -n|-b val path
n:表示子节点的最大个数
b:表示数据值的最大长度
val:子节点最大个数或数据值的最大长度
path:节点路径 -
listqueota path
列出指定节点的 quota(限制) -
delquota [-n|-b] path
删除quota -
其他命令
-
history
:列出命令历史 -
redo
: 该命令可以重新执行指定命令编号的历史命令,命令编号可以通过history
查看