Zookeeper概述

Zookeeper 会维护一个具有层次关系的数据结构,树。Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。每个节点能存大约1M的数据。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。


Zookeeper 这种数据结构有如下这些特点:
每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1。
znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录。
znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据。
znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务 器通过心跳来保持连接,这个连接状态称为 session。如果 znode 是临时节点,这个 session 失效,znode 也就删除了。
znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2。
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的。


ZooKeeper是为协作而设计的(通常使用小数据文件), 不是大容量的数据存储, 因此任何一个znode的数据存储量的上限是1MB。


getData,getChildren(),exists()这三个方法可以针对参数中的path设置watcher,当path对应的Node 有相应变化时,server端会给对应的设置了watcher的client 发送一个一次性的触发通知事件。客户端在收到这个触发通知事件后,可以根据自己的业务逻辑进行相应地处理。注意这个watcher的功能是一次性的,如果还想继续得到watcher通知,在处理完事件后,要重新register。


CreateMode 标识有四种形式的目录节点,分别是  
     * PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失; 
     * PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名; 
     * EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除; 

     * EPHEMERAL_SEQUENTIAL:临时自动编号节点  。


acl访问控制列表,新建节点时需要指定,分别是
     * CREATOR_ALL_ACL 这个ACL给身份验证id的所有权限
     * OPEN_ACL_UNSAFE 完全开放的目录
     * READ_ACL_UNSAFE 只读


stat结构  通过Stat stat = zk.exists(path, false);取得。

每一个节点的stat结构由下面的属性构成,均可以get取得,set设置:

        czxid  创建这个节点时的变更对应的事务号
        mzxid  最后修改这个节点的变更对应的事务号
        ctime  节点创建时的毫秒数
        mtime  节点最后一次修改时的毫秒数
        version  节点数据变更的版本号
        cversion  节点的子节点变更的版本号
        aversion  节点ACL变更的版本号
        ephemeralOwner  创建节点的会话id(临时性节点),非临时性节点为0
        dataLength  节点数据的长度
        numChildren  字节点的数目
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值