MAC M1大数据0-1成神篇-12 深入zookeeper(存储结构,节点分类,监听机制)

写在前面:

我们了解了zookeeper的命令后,那么下面我们来了解zookeeper的原理以及其他知识。

进入主题:

1.存储结构

  • zookeeper是一个树状结构,维护一个小型的数据节点znode
  • 数据以keyvalue的方式存在,目录是数据的key
  • 所有的数据访问都必须以绝对路径的方式呈现
  • 我们了解一下get里面的参数是什么意思吧;
    
    [zk:localhost:2181(CONNECTED)10]get /lzj
    666 当前节点的值
    cZxid=0xf00000013 创建这个节点的事务id,ZXID是一个长度64位的数字,低32位是按照数字递增,即每次客户端发起一个proposal,低32位的数字简单加1。高32位是leader周期的epoch编号
    ctime=MonDec0917:33:06CST2022 创建时间
    mZxid=0xf00000013 最后一次修改节点数据的事务
    IDmtime=MonDec0917:33:06CST2022修改时间
    pZxid=0xf00000014子节点的最新事务ID
    cversion=1对此znode的子节点进行的更改次数
    dataVersion=对此znode的数据所作的修改次数
    aclVersion=对此znode的acl更改次数
    ephemeralOwner=0x0(持久化节点)0x16ee9fc0feb0001(临时节点)
    dataLength=3数据的长度
    numChildren=1子节点的数目

2.节点的分类

zookeeper节点可以分为3类:持久化节点,临时节点,序列化节点。

持久化节点:默认创建的就是持久化节点

临时节点:

  • 创建临时节点命令是 create -e
  • 只要创建节点的会话有效,节点就不会消失。(类似于session,只要你创建那台服务器的zookkeeper客户端不关闭,那么这个节点就不会消失)
  • 可以被所有的客户端所查看
  • 事务编号和临时节点编号是一致的(sessionid跟ephemeralOwner是一样的)
  • 一旦会话结束,临时节点也会被自动删除,一般这个功能用于判断节点和服务器是否保持连接

序列化节点:

1.创建序列化节点命令是 create -s 

2.znode被创建后,znode名称会自动添加一个编号,编号会自动递增。

3.编号递增不会因为连接断开而重置

4.编号递增不会因为zookeeper重启而重置

3.zkServer的监听机制(watch)

命令:help里可以找到怎么使用。例:get /xx watch

原理:

Watch是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

机制特点

一次性触发数据发生改变时,一个watcher event会被发送到client,但是client只会收到一次这样的信息。watcher event异步发送

数据监视

1.Zookeeper有数据监视和子数据监视getdata() and exists()设置数据监视,getchildren()设置了子节点监视

2.watch监听有不同的类型,有监听状态的stat,内容的get,目录结构的ls。如下:

get /path[watch]NodeDataChanged
stat /path[watch]NodeDeleted
ls /path[watch]NodeChildrenChanged

3.父节点Watcher事件类型:

  • 创建父节点触发:NodeCreated
  • 修改父节点数据触发: NodeDataChanged
  • 删除父节点触发:NodeDeleted

4.子节点Watcher事件类型:

  • 使用ls命令为父节点设置watcher,子节点被创建时触发:NodeChildrenChanged
  • 使用ls命令为父节点设置watcher,子节点被删除时触发:NodeChildrenChanged
  • 使用ls命令为父节点设置watcher,子节点被修改时,不触发事件 

补充监听机制讲解:

图1

如图1,当主节点在zk创建临时节点live,备用节点一直watch(监听,一次性)着主节点创建的临时节点,突然主节点挂掉,主节点挂掉乡相应的临时节点也会消失。备用节点感知到了。往下看

图2

如图2,那么备用节点会在zk上创建自己的临时节点live:node02。往下看

图3

如图3,那么备用节点就成为了主节点,当之前的主节点苏醒过来后,发现zk上已经有了主节点,自己之前的临时节点已经被人占了,那么自己会watch主节点,也就是会watch临时节点live:node02,自己成为从节点,这样就完成了主备切换。 

完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值