zookeeper watch笔记

 

ZK其核心原理满足CP, 实现的是最终一致性, 它只保证顺序一致性.

zookeeper 基于 zxid 以及阻塞队列的方式来实现请求的顺序一致性。如果一个client连接到一个最新的 follower 上,那么它 read 读取到了最新的数据,
然后 client 由于网络原因重新连接到 zookeeper 节点,而这个时候连接到一个还没有完成数据同步的 follower 节点,那么这一次读到的数据不久是旧的数据吗?
实际上 zookeeper 处理了这种情况,client 会记录自己已经读取到的最大的 zxid,如果 client 重连到 server 发现 client 的 zxid 比自己大连接会失败

 

 

ZK 选举机制

 

 

 

ZK选举投票核心逻辑

 

FastLeaderElection通信使用的是ServerSocket, 没有使用NIO/Netty.因为集群通信的节点毕竟有限.


Watch机制

 

ZooKeeper 的 Watcher 机制,总的来说可以分为三个过程:客户端注册 Watcher、服务器处理 Watcher 和客户端回调 Watcher 客户端注册 watcher 有 3 种方式,getData、exists、getChildren;

getData()和exists()返回节点的内容,getChildren()返回子节点列表

 

实现原理

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

ZooKeeper 的 Watcher 机制主要包括客户端线程、客户端 WatchManager 和 ZooKeeper 服务器三部分。在具体工作流程上,简单地讲,客户端在向 ZooKeeper 服务器注册 Watcher 的同时,会将 Watcher 对象存储在客户端的 WatchManager 中。当 ZooKeeper 服务器端触发 Watcher 事件后,会向客户端发送通知,客户端线程从 WatchManager 中取出对应的 Watcher 对象来执行回调逻辑。如清单 9 所示,WatchManager 创建了一个 HashMap,这个 HashMap 被用来存放 Watcher 对象。

 

 注: 以上图片来自于咕泡mic老师课程.

 

转载于:https://www.cnblogs.com/snow-man/p/11213404.html

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

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

相关文章

单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)

1.JDK安装 在我的部署单节点kafka的博客里有相关的方法。(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的压缩包下载地址也在单节点部署的这篇博客里。 1.zookeeper集群的搭建 将zookeeper.tar.gz解压为三个目录,例…

[翻译]三张卡片帮你记住TDD的基本原则

原文地址:http://blog.briandicroce.com/2008/03/14/three-index-cards-to-easily-remember-the-essence-of-test-driven-development/ 当我浏览ObjectMentor的博客的时候,其中一篇Tim Ottinger的“TDD on Three Index Cards”引起了我的注意。他回忆了他…

凉哥核心圈程序员必备十大图书推荐(一)

写在前面 凉哥核心圈程序员必备十大图书推荐(一),各位伙伴应该一目了然了哈,没错凉哥准备出一系列图书推荐的文章,其实很多朋友在私下问凉哥除了大学的课程外自己要不要读一些技术类的书籍呢,答案当时要的…

了解大数据的特点、来源与数据呈现方式

本次作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2639 1.浏览2019春节各种大数据分析报告,例如: 这世间,再无第二个国家有能力承载如此庞大的人流量。http://www.sohu.com/a/290025769_313993春节人口迁…

强大而优雅,API 研发管理 EOLINKER 新版正式发布!

EOLINKER 于2019年3月3日正式发布新版本!该版本大幅强化各个产品的功能、着重优化了全站的用户交互体验,并且EOLINKER AMS 产品正式更名为 EOLINKER API Studio ——API 工作室,旨在为您提供API文档管理、自动化测试以及开发协作等全方位服务…

MATLAB 与 Excel 接口

MATLAB 与 Excel 接口MATLAB 与 Excel 有两种接口方式:一种是通过 MATLAB 提供的 Excel 生成器,生成220 MATLAB 实用教程DLL 组件和 VBA 代码,实现 Excel 对 MATLAB 的调用;另一种是利用 MATLAB 提供的 Excellink 插件&#xff0c…

计算 1+2!+3!+4!+...20!=?

package algs.factorial;import java.math.BigInteger;/*** Author: areful* Date: 2019/3/6* 计算 sum(n!), n1,2, ... 20*/ public class NFactorial {public static void main(String[] args) {System.out.println(calcFactorial0(3));System.out.println(calcFactorial1(3)…

区块链基础语言(三)——Go语言开发工具

一、在Windows系统安装Goland 1.1 下载 官网地址&#xff1a;https://www.jetbrains.com/go/download/#sectionwindows 1.2 安装 a. 双击“goland-2018.1.5.exe”&#xff0c;单击“运行”&#xff0c;如图1所示&#xff1b; <图1> b. 如图2所示&#xff0c;单击“next”…

准备重新开始写了

工作很忙,而且前一段时间项目组由于方向和人员调整一直很动荡,所以就没有心情和时间来整理技术.准备重新开张了,好好写,争取每个月出一到两篇说得过去的文章.转载于:https://www.cnblogs.com/sun/archive/2008/06/12/1218220.html

Georgia and Bob POJ - 1704 阶梯Nim

$ \color{#0066ff}{ 题目描述 }$ Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, number the grids from left to right by 1, 2, 3, ..., and place N chessmen on different grids, as shown in the following figure for exampl…

Tomcat总结

Tomcat调优原理&#xff1a; 1、增加最大连接数&#xff08;增大值避免队列请求过多&#xff0c;导致响应缓慢&#xff09; 2、调整工作模式 Bio(BlockingI/O)&#xff1a;默认工作模式&#xff0c;阻塞式I/O操作&#xff0c;没有任何优化技术处理&#xff0c;性能比较低。Nio(…

JVM的监控工具之jstack

参考博客&#xff1a;https://www.jianshu.com/p/213710fb9e40 jstack&#xff08;Stack Trace for Java&#xff09;命令用于生成虚拟机当前时刻的线程快照&#xff08;一般称为threaddump或者javacore文件&#xff09;。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈…

liunx驱动----异步通知

查询&#xff1a;消耗资源 中断&#xff1a;read 一直要去读poll &#xff1a;指定起始时间异步通知signal 测试程序include <stdio.h> include <signal.h>void my_signal(int signum) {static unsigned int cnt;printf("signum %d, %d timer\n",signum…

Niginx 集群负载均衡策略

Niginx 集群负载均衡策略 所需物料 1.Nginx服务 步骤略 本人 nginx version: nginx/1.16.0 2.Java Servlet 测试项目 新建java web 项目&#xff0c;项目名称为&#xff1a;tt import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annot…

记号一次更换IBM X3650M4主板后RAID无法启动的解决

https://wenku.baidu.com/view/9d503ef367ec102de2bd89d7.html 强烈感谢上面分享文档的大侠&#xff01;&#xff01; 1、更换主板后&#xff0c;linux系统&#xff0c;无法加载引导。需要设置主板的启动项 2、选择boot manager&#xff0c;进到下面的画面 3、选择add boot opt…

WCF basicHttpBinding之Message Security Mode

原创地址&#xff1a;http://www.cnblogs.com/jfzhu/p/4067873.html 转载请注明出处 前面的文章《WCF Security基本概念》介绍了WCF的security mode&#xff0c;简单说Transport是transport级别上的加密&am…

云计算学习资料分享:type查看命令

type 查看命令类型&#xff0c;例如该命令是alias&#xff0c;还是内置命令&#xff0c;还是某个文件&#xff0c;还是关键字 哪种神仙&#xff1a;天上还是地上&#xff0c;还是水里游的 [roottianyun ~]# type ll ll is aliased to ls -l --colorauto [roottianyun ~]# type …

关于83版射雕英雄传

今天无意中看到网上一群人关于83版射雕的一些争论.或许一些现在的年轻人不喜欢83版射雕,说那太老土了,但想想那个时代的条件,能拍出这样的片子,是非常不错的,而且我觉得83版射雕也是最忠于原著的,跟后来的翻版比较,虽然从画面效果,人物服装方面存在差距,但这都是由于历史原因和…

电子书下载:Programming Microsoft LINQ in Microsoft .NET Framework 4

Book DescriptionDig into LINQ — and transform the way you work with data. With LINQ, you can query data from a variety of sources — including databases, objects, and XML files — directly from Microsoft Visual Basic or C#. Guided by data-access experts w…

原型模式 —— Java的赋值、浅克隆和深度克隆的区别

赋值 直接 &#xff0c;克隆 clone 假如说你想复制一个简单变量。很简单&#xff1a; int a 5; int b a; b 6;这样 a 5, b 6 不仅仅是int类型&#xff0c;其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个…