首页 > 其他分享 >Zookeeper-Zookeeper Watcher

Zookeeper-Zookeeper Watcher

时间:2024-06-23 11:59:04浏览次数:21  
标签:Zookeeper ZooKeeper Watcher 事件 节点 客户端

Zookeeper Watcher机制 – 数据变更通知

     

Zookeeper Watcher机制是Zookeeper中的一种机制,用于实现数据变更的通知。

当一个客户端连接到Zookeeper服务器并注册一个Watcher时,它将收到与指定路径相关的数据变更的通知。Watcher是一个回调函数,当路径上的数据发生变化时,Zookeeper服务器会将通知发送给客户端。

Watcher机制的工作方式如下:

  1. 客户端连接到Zookeeper服务器并注册一个Watcher。
  2. 客户端向Zookeeper服务器发送一个读取请求,并指定要监视的路径。
  3. 当指定路径上的数据发生变化时,Zookeeper服务器将发送一个通知给客户端。
  4. 客户端收到通知后,Watcher函数将被调用,在函数中可以执行相应的操作来处理数据变化。

Zookeeper Watcher 特性总结

     

Zookeeper Watcher是Zookeeper中的一个特性,它有以下几个特点:

  1. 监听机制:Watcher是Zookeeper中的一个回调函数,当某个Znode节点发生变化时,Watcher会被触发,从而通知客户端节点的变化。

  2. 一次性触发:Watcher只会触发一次,当Watcher被触发后,如果客户端继续监听该节点,则需要重新设置Watcher。

  3. 事件通知顺序:Zookeeper保证Watcher的通知顺序,即保证先设置的Watcher先被通知。

  4. 通知方式:Watcher通知客户端的方式是通过回调方法,客户端需要事先注册Watcher,并在节点变化时执行回调方法。

  5. 版本号:每个Znode都有一个与之关联的版本号,当Znode发生变化时,版本号会更新,客户端可以通过版本号来检测节点是否发生变化。

  6. 轻量级:Watcher机制是Zookeeper中的一种轻量级事件触发机制,它通过回调函数实现,不需要复杂的线程机制。

客户端注册ZookeeperWatcher 实现

     客户端注册ZookeeperWatcher的实现可以参考以下步骤:

  1. 创建一个ZooKeeper对象,并连接到ZooKeeper服务器。可以使用ZooKeeper提供的构造函数来创建ZooKeeper对象,并传入ZooKeeper服务器的地址和会话超时时间。
String connectionString = "localhost:2181";
int sessionTimeout = 5000;
ZooKeeper zooKeeper = new ZooKeeper(connectionString, sessionTimeout, null);

  1. 创建一个Watcher对象,并实现process方法。Watcher对象用于处理ZooKeeper事件。在process方法中,可以根据不同的事件类型执行相应的逻辑。
Watcher watcher = new Watcher() {
    public void process(WatchedEvent event) {
        // 处理ZooKeeper事件的逻辑
    }
};

  1. 使用ZooKeeper对象的exists、getData、getChildren等方法注册Watcher对象。这些方法允许将Watcher对象与特定的ZooKeeper节点相关联。当节点的状态发生变化时,Watcher对象的process方法将被调用。
String path = "/myNode";
boolean watch = true;
Stat stat = zooKeeper.exists(path, watch);
byte[] data = zooKeeper.getData(path, watch, stat);
List<String> children = zooKeeper.getChildren(path, watch);

  1. 在Watcher对象的process方法中实现具体的逻辑。根据不同的事件类型,执行相应的操作。
public void process(WatchedEvent event) {
    if (event.getType() == EventType.NodeCreated) {
        // 节点创建事件的逻辑
    } else if (event.getType() == EventType.NodeDeleted) {
        // 节点删除事件的逻辑
    } else if (event.getType() == EventType.NodeDataChanged) {
        // 节点数据变更事件的逻辑
    } else if (event.getType() == EventType.NodeChildrenChanged) {
        // 子节点变更事件的逻辑
    }
}

服务端处理Zookeeper Watcher 实现

     

服务端处理Zookeeper Watcher可以通过以下步骤实现:

  1. 创建一个ZooKeeper客户端实例,并连接到ZooKeeper服务器。
ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, watcher);

  1. 在Watcher的process方法中处理ZooKeeper事件。
public void process(WatchedEvent event) {
    EventType eventType = event.getType();
    String path = event.getPath();
    
    // 根据事件类型进行处理
    if (eventType == EventType.NodeCreated) {
        // 节点创建事件
        // TODO: 处理节点创建事件
    } else if (eventType == EventType.NodeDeleted) {
        // 节点删除事件
        // TODO: 处理节点删除事件
    } else if (eventType == EventType.NodeDataChanged) {
        // 节点数据变更事件
        // TODO: 处理节点数据变更事件
    } else if (eventType == EventType.NodeChildrenChanged) {
        // 子节点变更事件
        // TODO: 处理子节点变更事件
    }
}

  1. 在Watcher的process方法中注册下一次需要监视的事件。
zooKeeper.exists(path, watcher);
zooKeeper.getChildren(path, watcher);
zooKeeper.getData(path, watcher);

这样,当ZooKeeper发生相关的节点操作时,Watcher的process方法会被调用,你可以在其中处理相应的操作。同时,你可以根据需要在处理完事件后,继续注册下一次需要监视的事件,以实现持续的监控。

总结 

    Zookeeper是一个开源的分布式协调服务,主要用于解决分布式系统中的一致性、协调、配置管理等问题。Zookeeper提供了一个简单的文件系统结构,可以用于存储和访问数据。分布式应用可以利用Zookeeper来实现各种功能,如领导选举、分布式锁、配置管理等。

Zookeeper Watcher是Zookeeper提供的一种机制,用来监听Zookeeper上节点数据的变化。Watcher会在节点数据发生变化时,通知注册了该Watcher的客户端。通过Watcher,客户端可以实时感知节点数据的变化,从而做出相应的处理。

Zookeeper Watcher的特点如下:

  1. 实时通知:当节点数据发生变化时,Watcher会立即通知客户端。客户端可以在收到通知后,及时对节点数据进行处理。
  2. 一次性触发:Watcher只会在节点数据发生变化时触发一次,触发后会被自动删除。如果需要继续监听节点数据的变化,客户端需要重新注册Watcher。
  3. 有序触发:如果在注册Watcher时指定了Watcher的顺序,Zookeeper会按照Watcher的注册顺序依次触发。这可以保证多个Watcher按照一定顺序处理节点数据的变化。
  4. 客户端负责恢复:当客户端与Zookeeper服务器的连接断开后,Watcher会被删除。客户端需要负责在恢复连接后重新注册Watcher。

标签:Zookeeper,ZooKeeper,Watcher,事件,节点,客户端
From: https://blog.csdn.net/Flying_Fish_roe/article/details/139707587

相关文章

  • zookeeper-05
    zookeeper负载均衡和nginx负载均衡区别   Zookeeper和Nginx都是常见的负载均衡解决方案,但在功能和应用场景上有一些区别。功能:Zookeeper负载均衡:Zookeeper是一个分布式协调系统,可以用于服务发现和负载均衡。它通过管理和维护一组服务节点的元数据信息,来实现请求的......
  • Zookeeper-06
    Zookeeper的java客户端   Zookeeper的Java客户端主要有以下几种:ZooKeeperJavaClient:这是官方提供的Java客户端,包含在ZooKeeper的发布版本中。它提供了一组简单的API,用于连接ZooKeeper服务器,并对节点进行操作。Curator:Curator是Netflix公司开发的一......
  • CertWatcher:一款功能强大的证书监控和恶意活动检测工具
    关于CertWatcherCertWatcher是一款功能强大的证书监控和恶意活动检测工具,旨在实时分析SSL/TLS证书,并检测web服务器上的恶意活动、漏洞和错误配置。它通过捕获和跟踪证书透明度日志,并使用YAML模板检测和分析钓鱼网站以及其他类型的恶意活动来实现其功能。Certwatcher持续监......
  • Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Port
    Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Portainer、MongoDB......) 精选 原创CodeDevMaster2022-11-1608:42:24博主文章分类:Docker©著作权文章标签dockermysqlNginxNacosMQ文章分类Docker云计算yyds干货盘点 Docker部署......
  • ZooKeeper-01
    ZooKeeper是什么   ZooKeeper是一个开源的、分布式的协调服务,它通过管理和协调分布式应用程序的配置信息、命名服务、分布式锁和分布式队列等来简化分布式系统的开发和管理。ZooKeeper提供了高可用、高性能和一致性的特性,可以帮助开发人员构建可靠的分布式应用程序。ZooK......
  • ZooKeeper源码解读
    ZooKeeper源码分析1.服务器构成群首(leader),追随者(follower),观察者(observer)本质上都是服务器。在实现服务器主要抽象概念是请求处理器。请求处理器是对处理流水线上不同阶段的抽象,每个服务器实现一个请求处理器的序列。zookeeper服务端有两种模式:单机的独立模式和集群的仲裁模式,......
  • ZooKeeper漫谈
    ZooKeeper漫谈1.什么是ZookeeperZookeeper是一个分布式协调服务的开源框架。主要作用是为分布式系统提供协调服务,包括但不限于:分布式锁、统一命名服务、配置管理、负载均衡、主控服务器选举以及主从切换等。ZooKeeper本质上是一个分布式的小文件存储系统。提供类似与文件系统......
  • linux环境 kafka3.4.0 刚搭建好(用kraft替代zookeeper) 怎么建个topic测试一下消费有没
        在使用Kafka3.4.0并且用Kraft(KafkaRaft)替代Zookeeper的情况下,步骤会有一些变化。这是因为Kraft模式下Kafka自身管理元数据,而不再依赖Zookeeper。以下是使用Kraft模式的Kafka3.4.0创建topic并进行生产和消费测试的具体步骤:###1.**启动Kaf......
  • Day7—zookeeper基本操作
    ZooKeeper介绍ZooKeeper(动物园管理员)是一个分布式的、开源的分布式应用程序的协调服务框架,简称zk。ZooKeeper是ApacheHadoop项目下的一个子项目,是一个树形目录服务。ZooKeeper的主要功能配置管理分布式锁集群管理Zookeeper数据模型​ZooKeeper是一个树形目......
  • 【WEEK16】 【DAY2】Dubbo和Zookeeper集成第二部分【中文版】
    2024.6.11Tuesday接上文【WEEK15】【DAY4】Dubbo和Zookeeper集成第一部分【中文版】目录18.Dubbo和Zookeeper集成18.3.测试环境搭建18.3.4.Windows下安装dubbo-admin18.3.4.1.下载dubbo-admin18.3.4.2.解压进入目录18.3.4.3.在项目目录下打包dubbo-admin18.3.4.4.执......