ZooKeeper 的 Watch 机制是什么?

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

Watch 机制的简介

ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理。

在 ZooKeeper 中,引入了 Watch 机制来实现这种分布式的通知功能。

ZooKeeper 允许客户端向服务端注册一个 Watch 监听,当服务端的一些事件触发了这个 Watch ,那么就会向指定客户端发送一个事件通知,来实现分布式的通知功能。

关于发布订阅模式的更多内容可以参考我的这篇博客——你怎么看待发布订阅模式的?

Watch 机制的特点

一次性触发

当 Watch 的对象发生改变时,将会触发此对象上 Watch 所对应的事件,这种监听是次性的,后续再次发生同样的事件,也不会再次触发。

事件封装

ZooKeeper 使用 WatchedEvent 对象来封装服务端事件并传递。

该对象包含了每个事件的 3 个基本属性,即通知状态( keeperState )、事件类型( EventType )和节点路径( path )。

异步发送

Watch 的通知事件是从服务端异步发送到客户端的

先注册再触发

ZooKeeper 中的 Watch 机制,必须由客户端先去服务端注册监听,这样才会触发事件的监听,并通知给客户端。

Watch 机制的通知状态和事件类型

同一个事件类型在不同的连接状态中代表的含义有所不同,下表列举了常见的连接状态和事件类型。

连接状态状态含义事件类型事件含义
Disconnected连接失败NodeCreated节点被创建
SyncConnected连接成功NodeDataChanged节点数据变更
AuthFailed认证失败NodeChildrenChanged子节点数据变更
Expired会话过期NodeDeleted节点被删除

从表可知, ZooKeeper 常见的连接状态和事件类型分别有 4 种,具体含义如下。

状态

  1. 当客户端断开连接,这时客户端和服务器的连接就是 Disconnected 状态,说明连接失败;
  2. 当客户端和服务器的某一个节点建立连接,并完成一次 version 、 zxid 的同步,这时客户端和服务器的连接状态就是 SyncConnected ,说明连接成功;
  3. 当 ZooKeeper 客户端连接认证失败,这时客户端和服务器的连接状态就是 AuthFailed ,说明认证失败;
  4. 当客户端发送 Request 请求,通知服务器其上一个发送心跳的时间,服务器收到这个请求后,通知客户端下ー个发送心跳的时间是哪个时间点。
    当客户端时间戳达到最后一个发送心跳的时间,而没有收到服务器发来的新发送心跳的时间,即认为自己下线,这时客户端和服务器的连接状态就是 Expired 状态,说明会话过期。

事件

  1. 当节点被创建时,NodeCreated 事件被触发;
  2. 当节点的数据发生变更时,NodeDataChanged 事件被触发;
  3. 当节点的直接子节点被创建、被删除、子节点数据发生变更时,NodeChildrenChanged 事件被触发;
  4. 当节点被删除时,NodeDeleted 事件被触发。
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值