文章目录
- Zookeeper基本功能和应用场景
- Zookeeper整体运行机制
- Zookeeper数据存储机制
- 数据存储形式
- znode类型
- 数据管理功能
- 创建节点:create /aaa 'hello'
- 查看节点下的子节点:ls /aaa
- 获取节点的value:get /aaa
- 修改节点的value:set /aaa 'world'
- 删除节点:rmr /aaa
- 数据监听功能
Zookeeper基本功能和应用场景
功能如下:
- 可以为客户端管理少量数据;(
文件系统
,形式:KV形式,例如:/aa/cc ‘hello’) - 可以为客户端监听指定数据节点的状态,并在数据节点发生变化时,通知客户端;(
监听加通知机制
)
应用场景:
- 服务器上下线的动态感知;
- 配置文件的同步;
Zookeeper整体运行机制
Zookeeper数据存储机制
数据存储形式
Zookeeper中对用户的数据采用kv形式存储。
key:
是以路径的形式表示,这就意味着,各key之间有父子关系;比如:/ 表示顶层key
用户建的key只能在 / 下作为子节点,比如建一个key:/aa 这个key可以带value数据
也可以建一个key:/bb
也可以建key:/aa/xx
zookeeper中,对每一个数据key,称为一个znode
(zookeeper数据节点)
如上描述,zk中的数据存储形式如下:
znode类型
zookeeper中的znode有多种类型:
名称 | 类型 | 描述 |
PERSISTENT | 持久的 | 客户端一旦建立,zk会持久保存,客户端就算跟集群断开联系,该类节点也会持久存在zk集群中,除非客户端手动删除 |
EPHEMERAL | 短暂的 | 客户端一旦跟集群断开联系,zk就会将这个节点删除 |
SEQUENTIAL | 带序号的 | 这类节点,zk会自动拼接上一个序号,而且序号是递增的 |
组合类型:
名称 | 类型 |
PERSISTENT | 持久不带序号 |
EPHEMERAL | 短暂不带序号 |
PERSISTENT 且 SEQUENTIAL | 持久且带序号 |
EPHEMERAL 且 SEQUENTIAL | 短暂且带序号 |
数据管理功能
创建节点:create /aaa ‘hello’
[root@manager ~]# zookeeper-client
[zk: localhost:2181(CONNECTED) 6] create /aaa 'hello'
Created /aaa
查看节点下的子节点:ls /aaa
[zk: localhost:2181(CONNECTED) 1] ls /aaa
[]
获取节点的value:get /aaa
[zk: localhost:2181(CONNECTED) 2] get /aaa
'hello'
cZxid = 0x300004aa1
ctime = Thu Nov 14 18:00:44 CST 2019
mZxid = 0x300004aa1
mtime = Thu Nov 14 18:00:44 CST 2019
pZxid = 0x300004aa1
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
修改节点的value:set /aaa ‘world’
[zk: localhost:2181(CONNECTED) 3] set /aaa 'world'
cZxid = 0x300004aa1
ctime = Thu Nov 14 18:00:44 CST 2019
mZxid = 0x300004b6e
mtime = Thu Nov 14 21:37:15 CST 2019
pZxid = 0x300004aa1
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
删除节点:rmr /aaa
[zk: localhost:2181(CONNECTED) 5] rmr /aaa
数据监听功能
-
ls /aaa watch
查看/aaa的子节点的同时,注册了一个监听”节点的子节点变化事件
“的监听器
新建一个窗口1,注册监听,另起一个窗口2,创建子节点,窗口1监听器发生变化
窗口1
[zk: localhost:2181(CONNECTED) 10] ls /aaa watch
[]
[zk: localhost:2181(CONNECTED) 11]
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/aaa
窗口2
[zk: localhost:2181(CONNECTED) 1] create /aaa/bbb 'world'
Created /aaa/bbb
-
get /aaa watch
获取/aaa的value的同时,注册了一个监听“节点value变化事件
”的监听器
新建一个窗口1,注册监听,另起一个窗口2,修改节点值,窗口1监听器发生变化
窗口1
[zk: localhost:2181(CONNECTED) 11] get /aaa watch
'hello'
cZxid = 0x300004b71
ctime = Thu Nov 14 21:39:48 CST 2019
mZxid = 0x300004b71
mtime = Thu Nov 14 21:39:48 CST 2019
pZxid = 0x300004b78
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 2
[zk: localhost:2181(CONNECTED) 12]
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/aaa
窗口2
[zk: localhost:2181(CONNECTED) 3] set /aaa 'world'
cZxid = 0x300004b71
ctime = Thu Nov 14 21:39:48 CST 2019
mZxid = 0x300004b7d
mtime = Thu Nov 14 21:47:03 CST 2019
pZxid = 0x300004b78
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 2
注意: 注册的监听器在正常收到一次所监听的事件后,就失效