`
coolxing
  • 浏览: 874873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97545
社区版块
存档分类
最新评论

ZooKeeper 数据模型

阅读更多

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] 

ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图:

图片引用自developerworks

图中的每个节点称为一个znode. 每个znode由3部分组成:

  • stat. 此为状态信息, 描述该znode的版本, 权限等信息.
  • data. 与该znode关联的数据.
  • children. 该znode下的子节点.

ZooKeeper命令

在深入znode的各个部分之前, 首先需要熟悉一些常用的ZooKeeper命令.

连接server

bin/zkCli.sh -server 10.1.39.43:4180

列出指定node的子node

[zk: 10.1.39.43:4180(CONNECTED) 9] ls /
[hello, filesync, zookeeper, xing, server, group, log]
[zk: 10.1.39.43:4180(CONNECTED) 10] ls /hello
[]

创建znode节点, 并指定关联数据

create /hello world

创建节点/hello, 并将字符串"world"关联到该节点中.

获取znode的数据和状态信息

[zk: 10.1.39.43:4180(CONNECTED) 7] get /hello
world
cZxid = 0x10000042c
ctime = Fri May 17 17:57:33 CST 2013
mZxid = 0x10000042c
mtime = Fri May 17 17:57:33 CST 2013
pZxid = 0x10000042c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

删除znode

[zk: localhost:4180(CONNECTED) 13] delete /xing/item0000000001
[zk: localhost:4180(CONNECTED) 14] delete /xing               
Node not empty: /xing

使用delete命令可以删除指定znode. 当该znode拥有子znode时, 必须先删除其所有子znode, 否则操作将失败. rmr命令可用于代替delete命令, rmr是一个递归删除命令, 如果发生指定节点拥有子节点时, rmr命令会首先删除子节点.

znode节点的状态信息

使用get命令获取指定节点的数据时, 同时也将返回该节点的状态信息, 称为Stat. 其包含如下字段:

  • czxid. 节点创建时的zxid.
  • mzxid. 节点最新一次更新发生时的zxid.
  • ctime. 节点创建时的时间戳.
  • mtime. 节点最新一次更新发生时的时间戳.
  • dataVersion. 节点数据的更新次数.
  • cversion. 其子节点的更新次数.
  • aclVersion. 节点ACL(授权信息)的更新次数.
  • ephemeralOwner. 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点, 请看后面的讲述.
  • dataLength. 节点数据的字节数.
  • numChildren. 子节点个数.

zxid

znode节点的状态信息中包含czxid和mzxid, 那么什么是zxid呢?
ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.

session

在client和server通信之前, 首先需要建立连接, 该连接称为session. 连接建立后, 如果发生连接超时, 授权失败, 或者显式关闭连接, 连接便处于CLOSED状态, 此时session结束.

节点类型

讲述节点状态的ephemeralOwner字段时, 提到过有的节点是ephemeral节点, 而有的并不是. 那么节点都具有哪些类型呢? 每种类型的节点又具有哪些特点呢?
persistent. persistent节点不和特定的session绑定, 不会随着创建该节点的session的结束而消失, 而是一直存在, 除非该节点被显式删除.
ephemeral. ephemeral节点是临时性的, 如果创建该节点的session结束了, 该节点就会被自动删除. ephemeral节点不能拥有子节点. 虽然ephemeral节点与创建它的session绑定, 但只要该该节点没有被删除, 其他session就可以读写该节点中关联的数据. 使用-e参数指定创建ephemeral节点.

[zk: localhost:4180(CONNECTED) 4] create -e /xing/ei world   
Created /xing/ei

sequence. 严格的说, sequence并非节点类型中的一种. sequence节点既可以是ephemeral的, 也可以是persistent的. 创建sequence节点时, ZooKeeper server会在指定的节点名称后加上一个数字序列, 该数字序列是递增的. 因此可以多次创建相同的sequence节点, 而得到不同的节点. 使用-s参数指定创建sequence节点.

[zk: localhost:4180(CONNECTED) 0] create -s /xing/item world
Created /xing/item0000000001
[zk: localhost:4180(CONNECTED) 1] create -s /xing/item world
Created /xing/item0000000002
[zk: localhost:4180(CONNECTED) 2] create -s /xing/item world
Created /xing/item0000000003
[zk: localhost:4180(CONNECTED) 3] create -s /xing/item world
Created /xing/item0000000004

 

watch

watch的意思是监听感兴趣的事件. 在命令行中, 以下几个命令可以指定是否监听相应的事件.

ls命令. ls命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的子节点的增减, 以及该znode本身的删除事件.

[zk: localhost:4180(CONNECTED) 21] ls /xing true
[]
[zk: localhost:4180(CONNECTED) 22] create /xing/item item000

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/xing
Created /xing/item

get命令. get命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的更新和删除事件.

[zk: localhost:4180(CONNECTED) 39] get /xing true
world
cZxid = 0x100000066
ctime = Fri May 17 22:30:01 CST 2013
mZxid = 0x100000066
mtime = Fri May 17 22:30:01 CST 2013
pZxid = 0x100000066
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:4180(CONNECTED) 40] create /xing/item item000
Created /xing/item
[zk: localhost:4180(CONNECTED) 41] rmr /xing

WATCHER::

WatchedEvent state:SyncConnected type:NodeDeleted path:/xing

stat命令. stat命令用于获取znode的状态信息. 第一个参数指定znode, 如果第二个参数为true, 则监听该node的更新和删除事件.

  • 大小: 15.1 KB
3
0
分享到:
评论

相关推荐

    zookeeper-3.4.14.rar

    二、ZooKeeper数据模型 ZooKeeper的数据模型类似于文件系统,由一系列路径名(ZNode)构成。每个ZNode都可以存储数据,同时可以有子ZNode。ZNode有三种类型:持久化节点、临时节点和顺序节点,它们分别对应不同的...

    zookeeper-3.4.12版本

    三、Zookeeper数据模型 Zookeeper的数据模型类似于文件系统,由节点(ZNode)构成,每个节点都可以存储数据,并具有版本号、ACL(访问控制列表)和时间戳等属性。节点分为临时节点(会话结束自动删除)和持久节点...

    ZooKeeper技术原理与应用.pptx

    ZooKeeper数据模型 ZooKeeper的数据模型包括目录结构、节点(znode)和数据。每个节点称为znode,具有唯一的路径标识。节点可以包含数据和子节点。Znode中的数据可以有多个版本。客户端应用可以在节点上设置监视器...

    zookeeper3.4.5.rar

    三、Zookeeper数据模型 Zookeeper的数据模型是一个层次化的命名空间,类似于文件系统的目录结构,称为ZNode。每个ZNode都可以存储数据,并且有自己的子节点。ZNode分为临时节点和持久节点,临时节点在创建它的客户端...

    zookeeper-3.4.10.tar.gz

    Zookeeper基于 zab 协议实现强一致性,并采用类文件系统的数据模型,使得操作简单直观。 二、Zookeeper 3.4.10 版本特性 1. 性能优化:3.4.10 版本对性能进行了大量优化,包括客户端连接、数据同步、请求处理等...

    Zookeeper中文开发指南

    **二、Zookeeper数据模型** Zookeeper的数据模型类似于文件系统,由一系列的路径标识符组成,每个路径称为Znode。Znode可以存储数据,并且具有版本号,支持多版本控制。 **三、Zookeeper角色** 1. **Leader**: ...

    Zookeeper程序员指南

    2、Zookeeper数据模型 Zookeeper的数据模型基于一种层次化的命名空间,类似于文件系统的目录结构,称为ZNodes。每个ZNode都存储数据,并且可以有子节点。这种模型允许创建复杂的分布式协调逻辑。 2.1、ZNodes节点 -...

    zookeeper 服务监控和管理

    1.1 ZooKeeper数据模型:Zookeeper的数据模型是一种树形结构,类似于文件系统,由节点(ZNode)组成。每个ZNode都有一个唯一的路径标识,并可以存储数据。 1.2 角色与组件: - Leader:负责处理所有的写请求,以及...

    zookeeper学习笔记

    通过这些知识点的学习,我们不仅了解了如何在 Linux 环境下安装配置 zookeeper,并且还掌握了基本的操作命令和数据模型的基础知识。这对于深入理解 zookeeper 的工作原理及应用场景非常有帮助。

    zookeeper+kafka+storm基本介绍

    1. **简单性**:Zookeeper 提供了一个类似文件系统的数据模型,用户可以通过简单的 API 来操作数据。 2. **表达能力**:Zookeeper 可用于实现多种分布式协调机制,例如分布式锁、分布式队列以及领导者选举等。 3. **...

    尚硅谷大数据之Zookeeper视频

    #### ZooKeeper数据模型 ZooKeeper维护了一个层次化的命名空间,类似于文件系统的目录树结构,其中每个节点称为一个ZNode。每个ZNode可以包含数据和子节点。ZNode有两种类型:持久节点和临时节点。持久节点会在创建...

    zookeeper tar包

    3. **ZooKeeper数据模型**:Zookeeper的数据模型类似于文件系统,由节点(Znode)组成,具有路径、数据、权限等属性。 4. **ZooKeeper协议**:Zookeeper通过Zab协议实现分布式一致性,保证在集群中所有节点的数据...

    apache-zookeeper-3.7.0-bin.zip

    - ZooKeeper数据模型:Zookeeper的数据模型类似于一个层次化的文件系统,每个节点称为znode,znode可以存储数据并具有唯一的路径标识。 -Watcher机制:Watcher是Zookeeper的一个重要特性,允许客户端注册监听事件,...

    apache-zookeeper-3.6.3-bin.zip

    - **Znode**:Zookeeper数据模型的基本单元,类似于文件系统的节点,可以存储数据和元数据。 - **Watcher**:一种事件监听机制,允许客户端注册对特定Znode的变更或事件的关注,并在这些事件发生时得到通知。 - **...

    最新版 apache-zookeeper-3.6.2-bin.tar.gz

    - ZooKeeper 数据模型基于树形结构,每个节点(称为 ZNode)可以存储数据,也可以有子节点,并且具有版本号,支持ACID特性。 - ZNode 分为临时节点和持久节点,临时节点在创建它的客户端断开连接后自动删除。 3. ...

    zookeeper3.4.3 下载

    ZNode是ZooKeeper数据模型的基本单元,类似于文件系统中的文件或目录。每个ZNode都可以存储数据,并且有自己的路径,比如"/config"或"/servers"。ZNodes可以有子ZNodes,形成一个层次化的命名空间。 其次,...

    ZooKeeper源码

    二、ZooKeeper数据模型 ZooKeeper的数据模型是层次化的命名空间,类似于文件系统,由节点(ZNode)组成。每个ZNode都有唯一的路径标识,可以存储数据,同时具备ACL(访问控制列表)和时间戳。 1. ZNode类型:分为...

    zookeeper服务压缩包

    3. **Zookeeper数据模型**:Zookeeper的数据模型是一个层次化的命名空间,类似于文件系统,由一系列路径名(Path)组成。每个路径名对应一个ZNode,ZNode可以存储数据,也可以有子ZNode。 4. **配置文件**:压缩包...

    zookeeper3.5

    4. **Zookeeper数据模型** 数据模型基于树形结构,每个节点称为ZNode,可以存储数据并具有版本号,支持ACID(原子性、一致性、隔离性、持久性)事务特性。 5. **Zookeeper应用场景** - **配置管理**:集中式管理...

    apache-zookeeper-3.5.8-bin.zip

    - **节点(ZNode)**: ZooKeeper 数据模型由一系列的节点(ZNode)组成,每个节点都可以存储数据并具有唯一的路径标识。 - **会话(Session)**: 用户与ZooKeeper 服务器之间的连接称为会话,会话具有超时机制,...

Global site tag (gtag.js) - Google Analytics