Zookeeper的监听机制

Zookeeper的监听机制是其实现分布式协调服务的一个核心功能。

它允许客户端注册Watcher(观察者)来监听特定的Znode(节点)上的事件,当Znode的状态发生变化时,Zookeeper会向注册了Watcher的客户端发送通知。

这种机制使得应用程序能够实时地感知到集群中节点的变化,从而作出相应的反应。

ZooKeeper 监听机制就是基于 zookeeper 上创建的节点,可以对这些节点绑
定监听事件,比如可以监听节点数据变更、
节点删除、子节点状态变更等事件。


通过这个事件机制,可以基于 zookeeper实现分布式锁,发布订阅(多个订阅
者同时监听某一个主题对象,当这个主题对象自身状态发生变化时,会通知所有
订阅者)等功能。 

监听机制的工作流程

  1. 注册Watcher:客户端在创建会话时可以注册Watcher到指定的Znode上。一旦Znode的状态发生改变,Zookeeper就会向注册了Watcher的客户端发送一个通知。
  2. 触发条件:Watcher可以在多种情况下被触发,包括但不限于:
    • 当Znode被创建时。
    • 当Znode的数据被更新时。
    • 当Znode被删除时。
    • 当子节点列表发生变化时。
  3. 发送通知:一旦触发条件满足,Zookeeper服务器会向客户端发送一个异步的通知,告诉它所关注的Znode发生了变化。这个通知通常包含一个事件类型(如NodeCreated、NodeDeleted、NodeDataChanged等)。
  4. 单次使用:重要的一点是,Watcher是一次性的。也就是说,一旦Watcher被触发并发送了通知,这个Watcher就失效了,需要重新注册以继续监听变化。
  5. 重新注册:客户端收到通知后,通常会重新注册Watcher,以继续监听后续的变化。

监听机制的应用示例

假设一个客户端想要监控一个名为/service的Znode,并且对它的数据变化感兴趣。它可以这样做:

Stat stat = zookeeper.exists("/service", true); // 注册Watcher
if (stat == null) {System.out.println("Node /service does not exist.");
} else {System.out.println("Node /service exists.");
}

在这个例子中,true参数指定了是否注册Watcher。如果/service节点存在,并且随后它的数据发生了变化,那么Zookeeper就会发送一个通知给客户端。客户端接收到通知后,通常会再次注册Watcher来继续监听。

监听机制的注意事项

  • 性能考量:由于Watcher是一次性的,并且是异步的,因此客户端需要确保在接收到通知后能够正确地处理并重新注册Watcher。
  • 并发控制:在并发环境下,多个客户端可能会同时尝试注册同一个Watcher,因此需要小心处理并发问题,以免造成混乱。
  • 网络延迟:由于Watcher是异步通知的,网络延迟可能会导致通知到达的时间不确定,因此应用程序应该具备一定的容错能力。

 

一、事件类型

  1. NodeCreated(节点创建)
    • 当一个新的Znode(节点)在Zookeeper的命名空间中被创建时,会触发这个事件。这可能是由于客户端执行了创建节点的操作,例如在Java中使用create方法,或者在命令行中使用相应的创建节点命令(如果有)。
  2. NodeDataChanged(节点数据修改)
    • 一旦Znode中的数据被更新,就会触发这个事件。例如,如果通过set命令(在命令行或者通过编程API中的对应操作)修改了节点的数据内容,那么所有注册了对该节点数据变化监听的客户端都会收到这个NodeDataChanged事件通知。
  3. NodeDeleted(节点删除)
    • 当一个Znode被从Zookeeper的命名空间中移除时,就会触发NodeDeleted事件。这可以是因为执行了delete命令(命令行或编程接口中的删除操作)。

二、命令解释

  1. stat -w path
    • stat命令通常用于查看Znode的状态信息,如版本号、创建时间等。当添加-w参数时,这表示对指定path的节点注册一个Watcher来监听与该节点状态相关的事件。具体来说,可能会监听该节点的创建、数据修改或者删除等事件,因为这些事件都可能导致节点状态的改变。
  2. ls -w path
    • ls命令用于列出指定path节点下的子节点列表。当使用-w参数时,是在该节点上注册一个Watcher来监听子节点的变化情况。当有子节点被创建、删除或者子节点数据发生变化(可能导致子节点列表的逻辑变化)时,会触发NodeChildrenChanged事件,注册了-w的客户端就会收到通知。
  3. get -w /node
    • get命令用于获取指定/node节点的数据内容。添加-w参数后,是在这个节点上注册一个Watcher,用于监听该节点数据的变化情况。当节点的数据被修改或者节点被删除时(因为节点删除也可以看作是一种特殊的数据变化情况),会触发相应的事件(如NodeDataChanged或者NodeDeleted),客户端会收到通知。

 

通过使用Watcher机制,Zookeeper能够支持实时的数据变更通知,这对于构建高度动态的应用程序和服务发现等场景非常有用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原创](Modern C++)现代C++的第三方库的导入方式: 例如Visual Studio 2022导入GSL 4.1.0

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共23年] 职业生涯: 21年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…

2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36)

参考:2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36) ubantu20.04,mysql5.7.13 navicat 远程连接数据库报错 2002 - Can’t connect to server on ‘192.168.1.61’ (36) 一、查看数据库服务是否有启动,发现有启动 systemctl status mysql…

漏洞检测工具:允许TRACE方法漏洞

允许TRACE方法漏洞 漏洞定义 TRACE方法是HTTP协议中定义的一种调试方法,主要用于测试或诊断Web服务器连接。Web服务器在配置时未正确禁用HTTP TRACE方法,从而允许客户端向服务器发送TRACE请求,并导致服务器返回可能包含敏感信息的响应。 漏…

linux socket编程之udp_dict_serve服务端--引入配置文件

注意:本篇博客只是对上一篇博客功能的增加 1.创建配置文件(翻译) Dict.txt apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 happy: 快乐的 sad: 悲伤的 run: 跑 jump: 跳 teacher: 老师 student: 学生 car: 汽车 bus: 公交车 love: 爱 hate: 恨 hell…

ESP32S3 使用LVGL驱动LCD屏(ST7789主控)

ESP32S3 使用LVGL驱动LCD屏(ST7789主控) 目录 1 分析原理图 2 驱动、点亮LCD(ST7789) 2.1 在工程中添加目录、文件 2.2 添加esp_lvgl_port组件 2.3 对工程进行必要的配置 2.4 编写必要代码 3 烧录、验证 1 分析原理图 要使用SOC驱动LCD屏&#…

Sigrity Optimize PI CapGen仿真教程文件路径

为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能,将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503

2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web数据安全AI 题解WriteUp

文章首发于【先知社区】:https://xz.aliyun.com/t/15442 Lyrics For You 题目描述:I have wrote some lyrics for you… 开题。 看一下前端源码,猜测有路径穿越漏洞 http://139.155.126.78:35502/lyrics?lyrics../../../../../etc/passw…

NLP 中文拼写检测开源-03-hunspell 拼写纠正算法入门介绍 CSC

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

SpringCloud 运用(3)—— Nacos配置中心

上一篇:SpringCloud 入门(2)—— 跨服务调度-CSDN博客 Nacos是阿里巴巴开源的服务发现与配置管理基础设施,旨在帮助开发者更轻松地构建云原生应用。它提供了一组简单易用的特性集,支持动态服务发现、配置管理和服务管理…

门户系统需要压测吗?以及门户系统如何压力测试?

一、门户系统为什么要进行压力测试? 首先一点要明确一下,统一门户上线以后,将是所有应用系统的入口,对应门户稳定性要求较高,门户实现了统一入口和统一认证,系统宕机将影响其他系统使用。一般部署架构要求…

专题八:背包问题

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是记忆化搜索,并且掌握记忆化搜索算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早…

SpringBoot核心:自动配置

有使用过SSM框架的,还记得曾经在spring-mybatis.xml配置了多少内容吗?数据源、连接池、会话工厂、事务管理,而现在Spring Boot告诉你这些都不需要了,简单的几个注解统统搞定,是不是很方便! 前言 SpringBoo…

python 定时任务管理封装

主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器,此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器&#xf…

APP投放的归因框架设计

一、归因相关概念回顾 在广告归因简介中我们介绍常见的归因模型和归因方法,我们先来回顾一下: 1. 背景 2. 设备标识 3. 归因模型 归因模型的多样性意味着每种模型都有其独特的优势和局限。关键在于选择一个与您的业务场景相匹配的模型,并且…

Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决

一、问题描述 1、服务器:Kunlun 2280服务器 ARM 2、操作系统:Euler2.0Sp10 Arm 3、Raid卡型号:MeGaRAID 9560-8i 4、Raid配置:2块配置Raid1作为系统盘,剩余磁盘配置Raid5 作为数据盘 二、问题现象 1、使用IBMC页面配置Raid卡,1个Raid1 系统盘和1个Raid5数…

[搜广推]王树森推荐系统——Deep Retrieval 召回

Deep Retrieval 简介 Deep Retrieval 是一种推荐系统框架,它将物品表示为路径(path),并在线上查找与用户最匹配的路径。 这种方法与传统的双塔模型不同,后者通常将用户和物品表示为向量,并在线上进行最近邻…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…

PCIe_Host驱动分析_设备枚举

往期内容 本文章相关专栏往期内容,PCI/PCIe子系统专栏: 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手,比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力,那么最核心的就是基于LLM进行意图识别分发能力,意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言 本人计划开发一套具备文本、语音、视频通话功能的IM demo,同时具备多人在线会议功能,按习惯大概会开源版定义名称为Duihao jo-im,本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话&#xff…