ZOOKEEPER知识点
数据模型
- hierarchal name space 有层次的命名空间
- much like a file distributed file system 有点像一个分布式的文件存储系统
- 每一个节点都可以存储数据,包括子节点
- 可以是canonical,absolute,slash-paths,没有相对引用
- zookeeper 是保留字段
ZNodes
- 每一个zookeeper树种的节点都是Znodes
- znodes包含的数据结构
name 名称 version number for data changes,acl changes 版本 timestamps 时间。和版本号一起验证缓存和保证一致更新
Watches
- 节点监控,可以对某一个节点进行监控
Data Access
- 所有的节点上的数据操作都是原子性的
- 每一个节点都有一个权限控制的表,Access Control List
- 本身不是设计用于存储大型数据,也不是一个数据库,用于保存一致性的数据,例如配置、状态信息
- 客户端会检测,数据不能超过1M的大小
Ephemeral Nodes 临时节点
- 和session生命周期同步,没有子节点
Sequence Nodes – Unique Naming
- 唯一有序节点,大小 signed int 4 bytes
Container Nodes
- 容器节点,当最后的一个子节点被删除时,将会被删除
- 3.5.3版本
TTL Nodes
- 有过期时间的节点,超时被删除
- 默认不启用
zookeeper 时间
name | 作用 |
---|---|
Zxid | Zookeeper Transaction Id 每一次服务器状态的改变都会有不同的ID |
Version Numbers | 包含三部分,version , cversion (Children),aversion (ACL) |
Ticks | 分布式时,用于超时验证 |
Real Time | ZK不使用真实时间,仅使用时间戳用于构造节点和用于节点通知 |
状态的数据结构
name | 作用 |
---|---|
czxid | zxid 创建时生成 |
mzxid | 更新时 |
pzxid | 子节点更新时 |
ctime | 创建时的时间戳 |
mtime | 更新时的时间戳 |
version | 数据更新时的版本 |
cversion | 子节点的数据版本 |
aversion | acl 版本 |
ephemeralOwner | 持有临时节点的session |
dataLength | 深度 |
numChildren | 子节点的数量 |
会话
- 创建会话时,需要提供服务器的连接,或者集群的所有连接
- 3.2.0 之后可以增加根路径
监控
- zk的getData(),getChildren(),exists() 都可以设置监控
watcher | future |
---|---|
One-time trigger | 一次通知,不重复 |
Send to the clinet | 保证客户端一定要接收到 |
The data for which the watch was set | 父子节点监控分开 |
watches 含义
- created event : exists
- deleted event : exists,getData,getChildren
- chagned event : exists,getData
- child event : getChildren