了解Zookeeper总结知识点

ZooKeeper 是什么?

Zookeeper是Apache下的一个开源的分布式协调中间件。是一个CP系统,为分布式系统提供强一致性的数据管理。
底层基于类似文件系统的目录节点树方式进行数据存储。每个节点默认最大大小为1M,用于存储数据或节点信息。Zookeeper通过监控这些数据的状态变化,从而达到基于数据的集群管理。
Zookeeper的一致性通过Zab协议实现,Zab协议有两种模式,分别是恢复模式和广播模式,对应着选主和同步两个阶段。当Leader节点崩掉或无法与大多数Follwer节点通信时,集群进行恢复模式选举出新的Leader节点,然后进入广播模式。

paxos的简化版算法 – Raft

Zookeeper集群中的角色和状态

在ZooKeeper中,节点角色通常可以分为以下几种:

  • 领导者(Leader):在ZooKeeper集群中,只有一个Leader节点,由集群中的所有节点进行投票选出。Leader节点负责处理所有的写请求,并将写操作广播给所有的Follower节点。
  • 跟随者(Follower):Follower节点是除了Leader之外的节点,它们负责处理客户端的读请求,并向Leader节点发送写请求。如果Leader节点出现故障,Follower节点会参与投票,从自己和其他节点中选择一个新的Leader。
  • 观察者(Observer):Observer节点在大多数情况下与Follower节点行为一致,但是它们不参与选举和投票,只同步Leader的广播数据和状态,以及处理客户端的读请求。由于不参与投票,Observer节点不会降低集群的写数据能力。

每个Server在工作过程中有4种状态:

  • LOOKING:当前Server不知道leader是谁,正在搜寻。
  • LEADING:当前Server即为选举出来的leader。
  • FOLLOWING:leader已经选举出来,当前Server与之同步。
  • OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。

ZooKeeper一致性的保证

  1. 顺序一致性:按照客户端发送请求的顺序更新数据。
  2. 原子性:更新要么成功,要么失败,不会出现部分更新。
  3. 单一性:无论客户端连接哪个server,都会看到同一个视图。
  4. 可靠性:一旦数据更新成功,将一直保持,直到新的更新。
  5. 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息或者服务器失效的信息。

如何保障顺序一致性

为了保障顺序一致性,zookeeper采用了递增的事务ID(zxid)来标识事务。所有的提议(proposal)都在被提出是加上zxid,实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

脑裂问题是什么?Zookeeper如何解决脑裂问题

集群节点间若出现网络隔离,网络隔离则可能会将集群划分成新的两个或多个集群,然后这些集群重新进行Leader选举,从而产生多个Leader节点,这将导致数据的不一致。
Zookeeper通过以下机制来解决脑裂问题:

  • 过半机制:只有节点收到超过集群一半的投票才会成为Leader。
  • 冗余通信:冗余更多的通信方式,避免单一通信造成网络隔离。
  • 共享资源:能够访问到共享资源的节点标识在集群中,不能访问到的则不在集群中。

zookeeper有四种类型的节点:

  1. PERSISTENT-持久化目录节点
    客户端与 zookeeper 断开连接后,该节点依旧存在
  2. PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
    客户端与 zookeeper 断开连接后,该节点依旧存在,只是 Zookeeper 给该节点名称进行顺序编号
  3. EPHEMERAL-临时目录节点
    客户端与 zookeeper 断开连接后,该节点被删除
  4. EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
    客户端与 zookeeper 断开连接后,该节点被删除,只是 Zookeeper 给该节点名称进行顺序编号

Watcher机制

ZooKeeper的Watcher机制是指客户端对ZooKeeper中的节点进行监听,当节点发生改变(如数据内容改变、被删除或子节点状态改变)时,ZooKeeper会通知已注册了Watcher的客户端。

Watcher机制的实现原理是:当客户端注册Watcher时,ZooKeeper会为该客户端创建一个监视点,并缓存该监视点对应的事件类型和节点。当节点发生改变时,ZooKeeper会检查该改变是否与已注册的监视点匹配,如果匹配,就会触发监视点的通知,并将该通知发送给注册了该监视点的客户端。
Watcher机制的特点是:

  • 异步通知:ZooKeeper采用异步通知的方式向客户端发送事件通知,因此客户端不必在注册监听后轮询阻塞。
  • 一次性触发:每个监视点只会在第一次事件发生时触发一次通知,如果想要继续触发,需要在回调的方法中重新注册监听。
  • 自定义监听器:客户端可以实现Watcher接口,自定义监听器的注册和回调方法,以处理不同的事件类型和节点状态。

总之,Watcher机制是ZooKeeper中实现分布式观察者模式的核心机制之一,可以用于实现发布/订阅、监听节点变化等功能。

Zookeeper的应用场景有哪些

  • 分布式协调:ZooKeeper可以简单的理解为分布式系统中的协调者,可以管理和协调系统中各个组件的行为和状态,以确保系统整体的协调一致性。
  • 分布式锁:通过创建和、监听、删除临时节点来实现分布式锁。
  • 元数据/配置信息管理:ZooKeeper可以作为分布式系统中的元数据和配置信息的管理中心,可以集中管理系统的配置信息和元数据,方便系统的配置和管理。
  • HA高可用性:通过ZooKeeper可以实现高可用性(HA)的系统架构,当部分节点出现故障时,ZooKeeper可以协调其他节点进行接管,保证系统的正常运行。

Zookeeper在HBASE中的角色担当

  • 协调者:ZooKeeper是HBase集群的"协调器"。HBase依赖ZooKeeper来协调不同组件之间的通信,例如HRegionServer和HMaster。当HRegionServer启动时,它会向ZooKeeper注册并提供状态信息(如是否在线),这些信息可供集群中的其他组件查询和使用。
  • 状态存储:ZooKeeper可以存储和管理HBase集群的状态信息。例如,当HMaster启动时,它会将HBase的系统表-ROOT-加载到ZooKeeper集群,其他组件可以通过ZooKeeper集群获取这些系统表的信息。此外,ZooKeeper还存储了当前系统表.META.的存储所对应的RegionServer信息。
  • 监控与处理:ZooKeeper还负责监控HBase集群中RegionServer的状态变化信息。当RegionServer的状态发生改变时,ZooKeeper会通知集群中的其他组件,例如HMaster,以便它们可以采取相应的行动。因此,ZooKeeper在HBase集群中扮演着重要的角色,确保集群的协调一致性。

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

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

相关文章

在微信公众号怎么实现每日签到功能

在微信公众号中实现每日签到功能,可以为企业或公众号运营者带来许多好处。每日签到功能不仅可以增加用户粘性,提高用户参与度,还可以为公众号带来更多的流量和曝光度。那么,如何在微信公众号中实现每日签到功能呢?本文…

vue3中css使用script中定义的变量

代码 <template><div class"box">haha</div> </template><script setup lang"ts"> const boxWidth 500px </script><style lang"scss"> .box {width: v-bind(boxWidth);height: 200px;background-c…

易优cms小程序插件升级到2.1版本

eyou小程序升级到2.1&#xff0c;主要新增一键获取手机号&#xff0c;统一返回格式等 升级内容&#xff1a; &#xff08;1&#xff09;对全部接口的返回格式做统一化设置 &#xff08;2&#xff09;新增一键获取手机号功能 &#xff08;3&#xff09;新增footprint足迹接口 &…

百度测开初面面试题分享(答案+文档)

1、java常用的异常处理机制 Java常用的异常处理机制有以下几种&#xff1a; 1&#xff09;try-catch-finally语句&#xff1a;用于捕获和处理异常。将可能抛出异常的代码放在try块中&#xff0c;然后在catch块中处理异常。无论是否发生异常&#xff0c;finally块中的代码都会…

长胜证券:怎么跟随主力进出?

跟着现在商场的快速改变和信息的普及化&#xff0c;人们在出资时越来越需求愈加精确的辅导和剖析。尤其是在股票商场&#xff0c;很多人想知道怎么跟从主力进出以获取更高的收益。在这篇文章中&#xff0c;咱们将从多个视点来评论这个论题。 一、了解主力资金的进出方向 首先&…

C++ Enet通信封装

C Enet通信封装 接口封装使用举例 Enet底层封装的是UDP通信&#xff0c;本文介绍了enet如何实现可靠udp传输的代码封装 接口封装 1)User_Enet_Listen监听端口函数 int User_Enet_Listen(const char *ip, int port, ENetHost **host) { ENetAddress address; if(!strcmp(i…

无涯教程-JavaScript - ISODD函数

描述 如果数字为奇数,则ISODD函数返回TRUE,如果数字为偶数,则返回FALSE。 语法 ISODD (number) 争论 Argument描述Required/OptionalNumber 要测试的值或表达式。 如果number不是整数,则将其截断。 Required Notes 您可以在执行计算之前使用此功能测试单元格的内容。 如果…

BUG:阿里巴巴图标库引入链接后,icon有时候会不显示的话svg下载到本地使用

忽然icon图标就不显示&#xff0c;但是代码、icon链接地址都没有发生变化 解决办法&#xff1a;将icon图标下载到本地&#xff0c;记住前后引用本地的名字要保持一致

软件设计师学习笔记9-进程调度

目录 1. PV操作 1.1进程的同步与互斥 1.1.1互斥 1.1.2同步 1.2 PV操作 1.2.1信号量 1.2.2 PV操作的概念 2.信号量与PV操作 2.1 PV操作与互斥模型 2.2 PV操作与同步模型 2.3 互斥与同步模型结合 3.前趋图与PV操作 1. PV操作 1.1进程的同步与互斥 1.1.1互斥 互斥&…

DOM文档对象模型

10.DOM文档对象模型 1.DOM节点的组成 元素节点 属性节点 文本节点 标签就是元素节点 class id的值 等 就是属性节点 文字,空格,换行就是文本节点 <div class"box">你好</div><元素节点 属性节点>文本不节点</元素节点>2如何获取页面元素…

Apache HTTPD 漏洞复现

文章目录 Apache HTTPD 漏洞复现1. Apache HTTPD 多后缀解析漏洞1.1 漏洞描述1.2 漏洞复现1.3 漏洞利用1.4 获取GetShell1.5 漏洞防御 2. Apache HTTPD 换行解析漏洞-CVE-2017-157152.1 漏洞描述2.2 漏洞复现2.3 漏洞利用2.4 修复建议 3. Apache HTTP Server_2.4.49 路径遍历和…

无涯教程-JavaScript - ISREF函数

描述 如果指定的值是参考,则ISREF函数返回逻辑值TRUE。否则返回FALSE。 语法 ISREF (value) 争论 Argument描述Required/OptionalvalueA reference to a cell.Required Notes 您可以在执行任何操作之前使用此功能测试单元格的内容。 适用性 Excel 2007,Excel 2010,Exce…

LCP 50. 宝石补给

每位勇者初始都拥有一些能量宝石&#xff0c; gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送&#xff0c;operations[j] [x, y] 表示在第 j 次的赠送中 第 x 位勇者将自己一半的宝石&#xff08;需向下取整&#xff09;赠送给第 y 位勇者。 在完成所有…

【LeetCode】210. 课程表 II——拓扑排序

题目链接&#xff1a;210. 课程表 II 题目描述&#xff1a; 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如…

【计算机网络】网络编程接口 Socket API 解读(7)

Socket 是网络协议栈暴露给编程人员的 API&#xff0c;相比复杂的计算机网络协议&#xff0c;API 对关键操作和配置数据进行了抽象&#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解 socket 编程。…

【Flowable】使用UEL整合Springboot从0到1(四)

前言 在前面我们介绍了Springboot简单使用了foleable以及flowableUI的安装和使用&#xff0c;在之前我们分配任务的处理人的时候都是通过Assignee去指定固定的人的。这在实际业务中是不合适的&#xff0c;我们希望在流程中动态的去解析每个节点的处理人&#xff0c;当前flowab…

9.12 C++作业

实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xff1a;半…

【Android知识笔记】UI体系(三)

View动画原理 当我们创建View动画时,一般使用类似如下代码: ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1); scaleAnimation.setDuration(3000); scaleAnimation.setFillAfter

Jest单元测试相关

官方文档&#xff1a;jest 中文文档 1、模拟某个函数&#xff0c;并返回指定的结果 使用Jest测试JavaScript(Mock篇) 有这样一个需求&#xff0c;mock掉Math.random方法&#xff08;0&#xff08;包括&#xff09;&#xff5e;1之间&#xff09;&#xff0c;使其返回指定的0…

华为Java工程师面试题

常见问题&#xff1a; 什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f;它与现实中的计算机有什么不同&#xff1f;Java中的基本数据类型有哪些&#xff1f;它们的范围是什么&#xff1f;什么是引用类型&#xff1f;Java中的引用类型有哪些&#xff1f;什么是对象&am…