美文网首页
zookeeper数据模型

zookeeper数据模型

作者: nextliving | 来源:发表于2018-11-05 17:56 被阅读8次

    在上一篇mac使用homebrew安装zookeeper中已经安装了zookeeper。本文接着讲述zookeeper的数据模型。

    启动zookeeper并查看节点状态

    首先使用$ zkServer start启动zookeeper,正常启动终端输出应该是:

    ZooKeeper JMX enabled by default
    Using config: /usr/local/etc/zookeeper/zoo.cfg
    Starting zookeeper ... STARTED
    

    然后重新打开一个终端,模拟客户端连接zookeeper,连接的命令为$ zkCli,连接成功以后输出:

    Connecting to localhost:2181
    Welcome to ZooKeeper!
    JLine support is enabled
    [zk: localhost:2181(CONNECTING) 0] 
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    

    可以使用$ ls /查看根节点/下已经注册的节点:

    [zookeeper]
    

    说明当前根目录下只有一个节点zookeeper。
    然后使用命令$ get /查看根节点/的状态,终端输出

    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x112
    cversion = 3
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 1
    

    zookeeper数据模型

    以上部分查看了zookeep中的节点。那么到底什么是节点呢?zookeeper官网的The ZooKeeper Data Model是这样描述的:

    ZooKeeper has a hierarchal name space, much like a distributed file system. The only difference is that each node in the namespace can have data associated with it as well as children. It is like having a file system that allows a file to also be a directory. Paths to nodes are always expressed as canonical, absolute, slash-separated paths; there are no relative reference.
    

    也就是说,zookeeper有一个结构化层次化的命名空间,其实也就是一个路径结构,以/开始,命名空间中的每一个路径就是一个节点(node),一般也会被称作znode。并且每个路径都是绝对路径,没有相对路径。开发者不能使用zookeeper作为路径名,该路径名被zookeeper自身使用。

    节点类型

    zookeeper节点类型分为4种:

    • 持久节点(persistent):持久节点又可以细分为2种,(1)持久非顺序节点:在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。不会因为创建该节点的客户端会话(session)失效而消失。(2)持久顺序节点(persistent sequence):比如创建的节点名是/iengchen/a,那么zookeeper会自动在该节点名后面加上一串数字,实际创建的节点是/iengchen/a0000000001
    • 临时节点(ephemeral): 持久节点又可以细分为2种,(1)临时非顺序节点:临时节点的会在创建该节点的会话(session)存在期间一直存在,当会话关闭该节点会自动被删除。因为这个特性,临时节点不允许有子节点。(2)临时顺序节点(ephemeral sequence): 参见持久顺序节点,该类型节点也没有子节点。

    节点状态字段含义

    节点状态包含下列字段:

    • cZxid:该节点被创建这个事务对应的zxid,zookeeper官网的解释是The zxid of the change that caused this znode to be created
    • ctime: 该节点创建以后的毫秒数(millisecond),zookeeper官网的解释是The time in milliseconds from epoch when this znode was created.
    • mZxid : 最后一次修改这个节点的事务操作对应的zxid,zookeeper官网的解释是The zxid of the change that last modified this znode
    • mtime: 该节点上一次被修改到现在的毫秒数,zookeeper官网的解释是The time in milliseconds from epoch when this znode was last modified.
    • pZxid:最后一次修改该节点的子节点的事务对应的zxid,注意:孙子节点无关。
    • cversion:对该节点的子节点的修改次数,zookeeper官网的解释是The number of changes to the children of this znode.
    • dataVersion:对该节点的数据的修改次数,zookeeper官网的解释是The number of changes to the data of this znode.
    • aclVersion:对该节点的acl的修改次数,zookeeper官网的解释是The number of changes to the ACL of this znode
    • ephemeralOwner: 如果该节点是临时节点(ephemeral),ephemeralOwner对应该节点的拥有者的sesssion id;如果该节点是持久节点,ephemeralOwner值为0。zookeeper官网的解释是The session id of the owner of this znode if the znode is an ephemeral node. If it is not an ephemeral node, it will be zero.
    • dataLength:该节点数据的长度,zookeeper官网的解释是The length of the data field of this znode
    • numChildren: 该节点拥有的子节点的数量,zookeeper官网的解释是The number of children of this znode

    znode数据大小和格式

    znode的数据部分默认只能存储1MB数据,并且只能存储字节数据,任何数据(图像、json、语音等)都需要先序列化成字节数组才能保存到znode中,参考Can we give the path of text files as data in zookeeper znodes?How to store a list of strings in a single ZooKeeper znode using Curator

    参考

    相关文章

      网友评论

          本文标题:zookeeper数据模型

          本文链接:https://www.haomeiwen.com/subject/stesxqtx.html