ZooKeeper核心概念

Session会话
在这里插入图片描述

  • 一个客户端连接一个会话,由zk分配唯一会话id
  • 客户端以指定的时间间隔发送心跳以保持会话的有效tickTime
  • 超过会话超时时间未收到客户端的心跳,则判断客户端死了(默认两倍tickTime)
  • 会话中的请求按照FIFO顺序执行

数据模型
层次名称空间:

  • 类似unix文件系统,以(/)为根
  • 区别:节点可以包含与之关联的数据以及子节点(即是文件也是文件夹)
  • 节点的路径总是表示为规范的、绝对的、斜杠分隔的路径

zonde:

  • 名称唯一,命名规范
  • 节点类型:持久、顺序、临时、临时顺序
  • 节点数据构成
    在这里插入图片描述
    znode-节点类型:
  • 持久类型:create /app1 666
  • 临时节点:create -e /app2 888
  • 顺序节点:create -s /app1/cp 888
    create -s /app1/ aa
    10位十进制序号
    每个父节点一个计数器
    计数器是带服号的int(4字节)到2147483647之后讲溢出(导致名称“ -2147483648”)
  • 临时顺序节点:create -e -s /app2 888

znode-数据构成

  • 节点数据:存储的协调数据(数据信息、配置、位置信息等)
  • 节点元数据(stat结构)
[zk: 127.0.0.1:2181(CONNECTED) 14] get /app1
666
cZxid = 0x22  创建该节点的zxid(事务ID)
ctime = Sun May 16 20:32:29 CST 2021 
mZxid = 0x22  最后修改该节点的zxid(事务ID)
mtime = Sun May 16 20:32:29 CST 2021
pZxid = 0x2c   最后更新子节点的zxid
cversion = 5    该节点子节点变更次数
dataVersion = 0  该节点数据被修改次数
aclVersion = 0  访问控制列表变更次数
ephemeralOwner = 0x0  临时节点会话所有者会话id,不是临时节点为0
dataLength = 3  该节点数据长度
numChildren = 3  子节点数
  • 数据量上限:1M (zk作为协调服务,数据量上限不应该大)

zk中的时间

  • Zxid ZooKeeper中每次更改操作都对应一个唯一的事务id,称之为Zxid,它是一个全局有序的戳记,如果zxid1小以zxid2,则zxid1发生在zxid2之前。
  • Version numbers 版本号,对节点的每次更改都会导致该节点的版本号增加1
  • Ticks 当使用多服务器ZooKeeper时,服务器使用“滴答”来定义时间的时间,如状态上传、会话超时、对等点之间的连接超时等。滴答时间仅通过最小会话超时(2倍滴答时间)间接公开;如果客户端请求的会话超时时间小于最小会话时间,服务器讲告诉客户端会话超时间实际上时最小会话超时时间
  • Real time ZooKeeper除了在znode创建和修改时间戳放在stat结构之外,根本不使用Real time或时钟时间。

Watch监听机制
客户端可以在zondes上设置watch,监听znode的变化

两类watch:

  • data watch 监听数据变更
  • chlid watch 监听子节点变化

触发wacth事件:

  • 创建事件:exists()
  • 删除事件:exists()、getData()、getChildren()
  • 修改事件:exists()、getData()
  • 子节点:getChildren()

watch重要特征:

  • 一次性触发:watch触发后即被删除,要持续监听变化,则需要持续设置watch
  • 有序性:客户端先得到wacth通知,后才会看到变化结果

watch注意事项:

  • watch是一次性触发器,如果获得了一个watch事件,并希望得到关于未来的通知,则必须设置另一个watch
  • 因为watch是一次性触发器,并在获取事件和发送获取watch的新请求之间存在延迟,所以不能可靠地得到节点发生的每个变更
  • 一个wacth对象是会被特定的通知触发一次,如果一个watch对象同时注册了exists、getData,当节点被删除时,删除事件对exists、getData都有效,但只会调用watch一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值