Zookeeper概述

来源:互联网 发布:一洋seo管家 编辑:程序博客网 时间:2024/05/21 10:50

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
原创粉丝点击