zookeeper的数据结构与监听功能

1、数据结构图
这里写图片描述
1、层次化的目录结构,命名符合常规文件系统规范(见下图)
2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
4、客户端应用可以在节点上设置监视器
2、节点类型
1、Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)-e
持久(persistent)(断开连接不删除)-s
2、Znode有四种形式的目录节点(默认是persistent )
PERSISTENT
PERSISTENT_SEQUENTIAL
EPHEMERAL
EPHEMERAL_SEQUENTIAL
3、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

3、zookeeper的命令行操作
启动zookeeper服务(集群),进行客户端连接

创建节点,设置数据(默认是持久化的persistent)
[zk: localhost:2181(CONNECTED) 4] create /app1 "this is app1 servers parent"
Created /app1
查看节点 必须以"/"开头
[zk: localhost:2181(CONNECTED) 5] ls /
[app1, zookeeper]
[zk: localhost:2181(CONNECTED) 7] create /app1/server01 "192.168.25.126,100" 
Created /app1/server01
[zk: localhost:2181(CONNECTED) 8] ls /app1
[server01]
获取节点相关内容
[zk: localhost:2181(CONNECTED) 9] get /app1
"this
cZxid = 0x100000008
ctime = Tue Sep 12 20:05:16 CST 2017
mZxid = 0x100000008
mtime = Tue Sep 12 20:05:16 CST 2017
pZxid = 0x100000009
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1
[zk: localhost:2181(CONNECTED) 10] get /app1/server01
"192.168.25.126,100"
cZxid = 0x100000009
ctime = Tue Sep 12 20:07:11 CST 2017
mZxid = 0x100000009
mtime = Tue Sep 12 20:07:11 CST 2017
pZxid = 0x100000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 20
numChildren = 0

不能显示数据是因为带空格不能被识别,给出的信息中有创建修改id和时间以及版本号等。

创建临时节点
[zk: localhost:2181(CONNECTED) 12] create -e /app-emphemeral1 8888
Created /app-emphemeral1
[zk: localhost:2181(CONNECTED) 13] ls /
[app1, app-emphemeral1, zookeeper]
退出后再查看,发现创建的节点已经清除掉了。
[zk: localhost:2181(CONNECTED) 14] quit
Quitting...
2017-09-12 20:13:16,258 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x25e75d32bca0002 closed
2017-09-12 20:13:16,259 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
[root@localhost bin]# ./zkCli.sh
。。
[zk: localhost:2181(CONNECTED) 0] ls /
[app1, zookeeper]
创建带序列的持久化节点
[zk: localhost:2181(CONNECTED) 1] create /test 888
Created /test
[zk: localhost:2181(CONNECTED) 2] create -s /test/aa 999
Created /test/aa0000000000
[zk: localhost:2181(CONNECTED) 3] create -s /test/bb 999
Created /test/bb0000000001
[zk: localhost:2181(CONNECTED) 4] create -s /test/aa 999
Created /test/aa0000000002
[zk: localhost:2181(CONNECTED) 5] create -s /app1/aa 999
Created /app1/aa0000000001
创建带序列的临时节点
[zk: localhost:2181(CONNECTED) 6] create -e -s /app1/cc 999
Created /app1/cc0000000002 (这个还是临时节点,退出就没了)
删除空节点
[zk: localhost:2181(CONNECTED) 0] ls /
[app1, jbm, idea, test, zookeeper, servers]
[zk: localhost:2181(CONNECTED) 2] ls /idea
[]
[zk: localhost:2181(CONNECTED) 3] delete /idea 
再次查看发现该节点已被删除
[zk: localhost:2181(CONNECTED) 4] ls /
[app1, jbm, test, zookeeper, servers]
删除非空节点
[zk: localhost:2181(CONNECTED) 8] ls /jbm
[mbj]
[zk: localhost:2181(CONNECTED) 10] rmr /jbm
[zk: localhost:2181(CONNECTED) 11] ls /
[app1, test, zookeeper, servers]

4、zookeeper的监听功能

[zk: localhost:2181(CONNECTED) 11] get /app1 watch
uuuuuu
cZxid = 0x100000008
ctime = Tue Sep 12 20:05:16 CST 2017
mZxid = 0x100000013
mtime = Tue Sep 12 20:22:35 CST 2017
pZxid = 0x100000012
cversion = 3
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 3
另一台机器,设置app1的值
[zk: localhost:2181(CONNECTED) 2] set /app1 hhhhhhh
cZxid = 0x100000008
ctime = Tue Sep 12 20:05:16 CST 2017
mZxid = 0x100000015
mtime = Tue Sep 12 20:26:29 CST 2017
pZxid = 0x100000012
cversion = 3
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 3

再看第一台机器:
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/app1

注:监听只能生效一次,再次修改就监听不到了
上面这种方式只能监听到app1的数据变化不能监听到子节点

下面方式可以监听到子节点
[zk: localhost:2181(CONNECTED) 14] ls /app1 watch
[aa0000000001, cc0000000002, server01]
另一台机
[zk: localhost:2181(CONNECTED) 7] create /app1/adc hahaha
再看第一台
[zk: localhost:2181(CONNECTED) 1] 
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/app1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值