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,一经查实,立即删除!

相关文章

洛谷 P1352 没有上司的舞会

洛谷 P1352 没有上司的舞会 Description 某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指…

单机简单搭建一个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”引起了我的注意。他回忆了他…

异常 try catch finally return 执行关系 MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.com异常 try catch finally return 执行关系 MD 目录 目录探讨finally语句的执行与return的关系探讨finally语句的执行与return的关系 Java异常捕获机制try.…

Java数据结构之线性表(2)

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Lets go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几张,我们将会分别讲解这几种数据结构,主要也是通过Java代码的…

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

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

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

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

MYSQL中只知表名查询属于哪个SCHEMA

只知道表名XXX查该表属于哪个schema、以及该表有哪些列等信息SELECT * from information_schema.columns WHERE table_name xxx; 只知道列名XXX查哪个schema有该列、以及有列名为XXX的表有哪些等SELECT * from information_schema.columns WHERE column_name XXX;参考链接&am…

ACCESS SQL语法参考

ACCESS SQL语法参考 一. 基础概念 可以使用的数据类型如下: 1. TEXT:文本型(指定长度时),备注型(不指定长度时); 2. CHAR,NCHAR,VARCHAR&#xff0…

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

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

关注视聊效果!中星微摄像头对比测试

不知不觉中,一种小型的数码产品不声不响的潜入了大多数网民的家庭——摄像头,这种令网络世界变得活泼、生动、直观的小东西给我们带来了一阵视频的风,它的背后隐藏着什么?让我们揭开背后的秘密,撩起那视频的面纱。 现今…

MarkDown语法-使用博客园的markDown编辑

一个是一个大标题 两个是一个小标题 是三级标题 最高阶标题加下划线 高阶标题加双下划线 是二阶标题二阶标题区块引用blockquotes 换行也是没有关系的啦啦啦啦啦啦啦啦绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿啦啦啦啦啦啦啦啦绿绿了 区块引用可以嵌套 嵌套 标题区块引用…

版本控制--搭建 GitLab 服务器

GitLab 简介 GitLab 是利用 Ruby On Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与 GitHub 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库…

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)…

转大学毕业后拉开差距的原因

原文 有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享&…

用户态和内核态的理解和区别

1、linux进程有4GB地址空间,如图所示:3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。2、特权级的概念:对于任何操作系统来说,创建一个进程是核心功能。创建进…

面经-多益网络

面试时间:2019.07.22 QQ视频面试 面试岗位:人工智能及大数据/一面 面试时长:35分钟 面试内容: 自我介绍项目-视频召回实际场景题-怎么通过数学公式查找相似的数学公式对加班怎么看对比实习公司的特点主动询问落地方向面试评价&…

区块链基础语言(三)——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”…

最小的K个数

最小的K个数 题目描述 输入n个整数&#xff0c;找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字&#xff0c;则最小的4个数字是1,2,3,4,。 未完, 待续, 好像设计堆排序 先排序在遍历, 此处使用插曲排序 class Solution { public:void insertSort(vector<int> &am…