目录

  1. ZooKeeper 数据模型概述
  2. ZNode 结构详解
  3. ZNode 类型
  4. ZNode 的属性
  5. 操作 ZNode 的示例
  6. 参考资料

ZooKeeper 数据模型概述

ZooKeeper 的数据模型是一个层次化的命名空间,类似于文件系统,但专为分布式协调设计。它由称为 ZNode 的节点组成,每个 ZNode 可以存储数据并拥有子节点。ZooKeeper 的数据模型特点包括:

  • 树形结构:以 / 为根节点,路径用斜杠分隔(如 /app/config)。
  • 小数据存储:ZNode 通常存储少量数据(默认最大 1MB),适合配置、状态等。
  • 一致性:所有节点共享一致的视图,数据更新是原子的。

ZNode 结构详解

ZNode 是 ZooKeeper 数据模型的基本单位,既是路径的一部分,也可以存储数据。它的结构类似文件系统中的文件或目录,但有独特的特性。

ZNode 的特点

  • 路径唯一:每个 ZNode 由路径标识,例如 /znode1
  • 数据存储:每个 ZNode 可以存储少量字节数据(通常是键值对形式)。
  • 层次化:支持嵌套结构,父节点必须存在才能创建子节点。
  • 临时性与持久性:ZNode 可以是临时的(客户端断开后删除)或持久的。

ZNode 类型

ZooKeeper 支持多种 ZNode 类型,根据生命周期和用途不同分为以下几类:

  1. 持久节点 (Persistent ZNode)
  • 特点:创建后永久存在,除非显式删除。
  • 用途:存储配置信息、静态数据。
  • 创建方式create /path data(无特殊参数)。
  1. 临时节点 (Ephemeral ZNode)
  • 特点:与创建它的客户端会话绑定,会话结束后自动删除。
  • 用途:用于领导者选举、分布式锁。
  • 创建方式create -e /path data
  1. 持久顺序节点 (Persistent Sequential ZNode)
  • 特点:持久存在,且名称自动追加递增序号(如 /path0000000001)。
  • 用途:任务队列、命名服务。
  • 创建方式create -s /path data
  1. 临时顺序节点 (Ephemeral Sequential ZNode)
  • 特点:临时存在,名称带序号,会话结束后删除。
  • 用途:分布式锁排序、临时任务分配。
  • 创建方式create -e -s /path data
  1. 容器节点 (Container ZNode)(3.5.3+)
  • 特点:持久节点,专为嵌套结构设计,当最后一个子节点删除时自动删除。
  • 用途:管理临时子节点。
  • 创建方式create -c /path
  1. TTL 节点 (TTL ZNode)(3.6.0+)
  • 特点:持久节点,设置生存时间(TTL),到期后自动删除。
  • 用途:临时数据清理。
  • 创建方式:需通过 API 指定 TTL(CLI 不直接支持)。

ZNode 的属性

每个 ZNode 都有元数据,通过 stat 命令或 API 可以查看。主要属性包括:

  • czxid:创建时的 ZooKeeper 事务 ID。
  • mzxid:最后修改的事务 ID。
  • ctime:创建时间(Unix 时间戳,毫秒)。
  • mtime:最后修改时间。
  • version:数据版本号,每次更新递增。
  • cversion:子节点版本号。
  • aversion:ACL(访问控制列表)版本号。
  • ephemeralOwner:临时节点的会话 ID(持久节点为 0)。
  • dataLength:数据字节长度。
  • numChildren:子节点数量。
  • pzxid:子节点最后修改的事务 ID。

示例输出(stat 命令)

stat /znode1

输出:

cZxid = 0x100000002
ctime = Wed Mar 28 10:00:00 UTC 2025
mZxid = 0x100000002
mtime = Wed Mar 28 10:00:00 UTC 2025
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0

操作 ZNode 的示例

以下通过 ZooKeeper 客户端命令行(zkCli.sh)展示 ZNode 操作。

启动客户端

zkCli.sh -server localhost:2181
  1. 创建持久节点
   create /app "app data"
   get /app

输出:app data

  1. 创建临时节点
   create -e /temp "temp data"
   get /temp

退出客户端后(quit),再次连接检查:

   ls /

/temp 已消失。

  1. 创建顺序节点
   create -s /queue "task1"
   create -s /queue "task2"
   ls /queue

输出:[queue0000000001, queue0000000002]

  1. 修改和查看属性
   set /app "new data"
   stat /app
   get /app

输出:

   new data
   [更新后的 stat 属性]
  1. 删除节点
   delete /app

参考资料


这是 ZooKeeper 数据模型和 ZNode 结构的详细解析,涵盖了类型、属性和操作示例。如果您需要更深入的内容(例如 ZNode 在分布式系统中的应用场景),请告诉我!