数据模型
- 分层结构
- 树形结构中的每个节点叫做znode
- 每个znode包含三类数,
- 第一: znode自身的数据内容;
- 第二: znode 节点的状态信息 stat info, 来存储数据的变化 ACL的变化和时间戳;
- 第三: znode 的ACL 信息(权限信息).
- 节点路径
- 斜线分隔例如: /Zoo/Duck
- 没有相对路径
- 数据发生变化时,版本号会递增
- 可以对Znode中的数据进行读写操作
基本概念
集群角色
- Leader: 为客户端提供读写服务
- Follower: 提供读服务, 所有的写服务都需要转交给Leader角色,参与选举
- Observer: 提供读服务, 不参与选举过程,一般是为了增强zk集群的读请求并发能力
会话(session)
- Zk的客户端与zk的服务端之间的连接
- 通过心跳检测保持客户端连接的存活
- 接收来自服务端的watch事件通知
- 可以设置超时时间
数据节点znodel类型
- Zk树形结构中的数据节点,用于存储数据
- 持久节点(PERSISTENT): 一旦被创建, 除非主动调用删除操作, 否则一直存储在ZK
- 临时节点(EPHEMERAL): 与客户端的会话绑定,一旦客户端会话失效, 这个客户端所创建的所有临时节点都会被移除
- PERSISTENT_SEQUENTIAL: 创建子节点时,如果设置属性SEQUENTIAL,则会自动在节点名称后面增加一个整形数字, 上限是整形的最大值.
- EPHEMERAL_SEQUENTIAL: 创建建节点时,如果设置属性SEQUENTIAL,则会自动在节点名称后面增加一个整形数字, 上限是整形的最大值.
znode 的stat信息
使用get命令获取指定节点的数据时, 同时也将返回该节点的状态信息, 称为Stat. 其包含如下字段:
- czxid. 节点创建时的zxid.
- mzxid. 节点最新一次更新发生时的zxid.
- ctime. 节点创建时的时间戳.
- mtime. 节点最新一次更新发生时的时间戳.
- dataVersion. 节点数据的更新次数.
- cversion. 其子节点的更新次数.
- aclVersion. 节点ACL(授权信息)的更新次数.
- ephemeralOwner. 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0.
- dataLength. 节点数据的字节数.
- numChildren. 子节点个数.
watcher
- 作用于Znode节点
- 多种事件通知: 数据更新,子节点状态等
ACL(Access Control Lists)
- 类似于linux/unix的权限控制
- CREATE: 建子节点的权限
- READ: 获取节点数据和子节点列表的权限
- WRITE: 更新节点数据的权限
- DELETE: 删除子节点的权限
- ADMIN: 配置节点ACL的权限
CREATE和DELETE是针对子节点的权限控制