当前位置: 首页 > news >正文

Zookeeper简述

数新网络-让每个人享受数据的价值

官网现已全新升级—欢迎访问!

前 言

ZooKeeper是一个开源的、高可用的、分布式的协调服务,由Apache软件基金会维护。它旨在帮助管理和协调分布式系统和应用程序,提供了一个可靠的平台,用于处理分布式同步、配置管理和群组服务等任务。ZooKeeper广泛应用于构建分布式系统,它提供了一个稳定的基础来管理配置、协调节点、实现分布式锁、实现分布式队列等。通过ZooKeeper,开发人员可以轻松解决分布式系统中的同步和协调问题,使得分布式应用的开发更加简单和可靠。

01 zookeeper的特点

1-1 高可用性

ZooKeeper的设计目标之一是高可用性。它通过复制数据到多个服务器,使用Quorum算法来确保数据的一致性。如果部分节点发生故障,仍然能够提供可用的服务,保持系统的可用性。

1-2 一致性

ZooKeeper提供强一致性保证。在ZooKeeper集群中,大多数节点(法定人数)必须就数据的状态达成一致意见。这样可以确保每个客户端对数据的读取都能获得相同的最新数据。

1-3 简单数据模型

ZooKeeper采用类似文件系统的数据模型,使用树状结构来存储数据。每个节点(Znode)都有一个路径和一个数据负载。这种简单的数据模型使得ZooKeeper易于理解和使用。

1-4 事件通知

ZooKeeper支持Watch机制,客户端可以设置在Znode上的观察,以便在Znode发生更改时接收通知。这样可以实现分布式的事件通知和协作机制,支持事件驱动的应用程序设计。

1-5 顺序节点

 ZooKeeper支持顺序节点的创建,即创建的节点会自动带有唯一递增的序列号。这个特性可用于实现分布式锁、分布式队列等常见的协调原语。

1-6 原子操作

ZooKeeper提供原子操作,可以保证复杂的多步骤操作在ZooKeeper上是原子的。这些原子操作为构建高级别的分布式协调原语提供了支持。

1-7 集群模式

一致性。ZooKeeper集群中的节点可以动态地加入或离开,使得系统更加灵活和可扩展。

1-8 临时节点

ZooKeeper支持临时节点,这些节点的生命周期与客户端会话相关联。当客户端会话结束时,临时节点会被自动删除,这样可以实现临时性的数据和状态管理。

02  zookeeper架构

下图为zookeeper架构的角色分布图:

图片

2-1 Leader:

集群中的一个服务器被选举为Leader。Leader负责处理客户端的写请求(例如创建、更新和删除Znodes)和协调分布式事务。Leader通过ZooKeeper协议来确保写操作在集群中的大多数节点上同步执行,以保持数据的一致性。如果Leader服务器发生故障或断开连接,集群会通过选举算法自动选择新的Leader。

2-2 Follower

Follower是集群中的其他服务器,它们遵从Leader的指令,复制Leader上的写操作,以保持数据一致性。Follower可以处理客户端的读请求,但不能处理写请求。Follower与Leader保持心跳连接,以便及时了解Leader的状态。

观察者是一种特殊类型的ZooKeeper服务器,它不参与Leader选举,也不参与写操作的复制。

03  选举机制

集群中在 Zookeeper运行期间 Leader 和 非 Leader 各司其职,当有非 Leader 服务器宕机或加入不会影响 Leader,但是一旦 Leader 服务器挂了,那么整个 Zookeeper 集群将暂停对外服务,会触发新一轮的选举。

图片

第一次投票每台机器都会将票投给自己。接着每台机器都会将自己的投票发给其他机器,如果发现其他机器的zxid比自己大,那么就需要改投票重新投一次。比如server1 收到了三张票,发现server2的xzid为102,pk一下发现自己输了,后面果断改投票选server2为老大。

3-1 Server id(或sid):服务器ID

比如有三台服务器,编号分别是1,2,3。编号越大在选择算法中的权重越大,比如初始化启动时就是根据服务器ID进行比较。

3-2 Zxid:事务ID

服务器中存放的数据的事务ID,值越大说明数据越新,在选举算法中数据越新权重越大。

3-3 Epoch:逻辑时钟

也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。

3-4 Server状态:选举状态

LOOKING,竞选状态。

FOLLOWING,随从状态,同步leader状态,参与投票。

OBSERVING,观察状态,同步leader状态,不参与投票。

LEADING,领导者状态。

04 ZAB协议

ZAB(Zookeeper Atomic Broadcast)协议是Zookeeper内部用于实现分布式一致性的核心协议。它是一个基于原子广播的协议,用于保证Zookeeper集群中数据的一致性和可靠性。ZAB协议是Zookeeper的关键特性之一,确保在集群中的各个节点之间维持数据的一致性。

ZAB协议的特点:

原子广播:ZAB协议确保事务是原子性广播的,要么所有Follower节点都接收到该事务,要么都没有接收到。这样可以保证数据的一致性。

崩溃恢复:ZAB协议允许集群在部分节点宕机或崩溃后,重新选举新的Leader,从而保持服务的可用性和容错性。

顺序性:ZAB协议保证所有节点按照相同的顺序处理事务,从而保持数据的一致性。

轻量级:ZAB协议只需要在集群中的少数节点上进行广播和确认,因此具有较低的通信开销。

交叉验证可以帮助准确地估计模型的性能,从而支持更好的模型选择和超参数调整,以获得更好的泛化性能。

05 CAP理论

Zookeeper是一个分布式协调服务,它主要用于构建分布式系统中的协调和同步机制。而CAP理论则是分布式系统理论中的重要概念,它描述了在分布式系统中三个关键属性的权衡:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。CAP理论指出在分布式系统中,无法同时满足这三个属性,只能选择其中两个,因为其中任意两个属性之间是存在冲突的。

具体来说,CAP理论的三个属性解释如下:

5-1 一致性(Consistency)

在分布式系统中,一致性意味着所有节点在同一时刻看到的数据副本是相同的。即使是在有多个副本的情况下,所有节点也能够看到相同的数据。

5-2 可用性(Availability)

可用性指的是系统能够在有限时间内对请求作出响应,并能够保证服务的可用性,即使在部分节点故障的情况下。

5-3 分区容忍性(Partition Tolerance)

网络中断或节点之间无法相互通信,系统仍然能够保持可用性和一致性。

在CAP理论中,在分布式系统中只能选择其中两个属性,并且一般情况下选择分区容忍性是必须的,因为网络分区是不可避免的,特别在大规模的分布式系统中。Zookeeper在设计时倾向于CP(一致性和分区容忍性)模型。

它优先保证数据的一致性和分区容忍性,而可用性可能会在某些情况下受到影响。在Zookeeper中,当网络分区发生时,集群会尝试维持数据的一致性,但可能会导致一些节点在分区期间暂时不可用。这是因为Zookeeper为了保持数据的一致性,需要在多数节点上进行写操作确认,如果无法满足多数节点的写操作,写操作将被阻塞,从而影响可用性。

06 总结

Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用 来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、 Server 之间状态同步等。

Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型。

相关文章:

Zookeeper简述

数新网络-让每个人享受数据的价值 官网现已全新升级—欢迎访问! 前 言 ZooKeeper是一个开源的、高可用的、分布式的协调服务,由Apache软件基金会维护。它旨在帮助管理和协调分布式系统和应用程序,提供了一个可靠的平台,用于处理…...

1、Flutter移动端App实战教程【环境配置、模拟器配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK,一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验,主要在于其拥有高性…...

stride与padding对输出尺寸的计算

公式: 练习: 图1: input4,filter3,padding0,stride1 output2 图2: input5,filter3,padding0,stride2 output2 图3: input6,filter3&am…...

Excel VSTO开发2 -建立Excel VSTO项目

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 2 建立Excel VSTO项目 新建项目,选择Excel 2013和2016 VSTO外接程序。输入项目名称(本示例的项目名称为&am…...

chrome插件:一个基于webpack + react的chrome 插件项目模板

项目结构 $ tree -L 1 . ├── README.md ├── node_modules # npm依赖 ├── package.json # 详细依赖 ├── pnpm-lock.yaml ├── public # 里边包含dist,安装的时候安装这个目录即可 ├── src …...

Vue:组件缓存

组件缓存 keep-alive 文章目录 组件缓存 keep-alive一、keep-alive是什么二、keep-alive优点三、问题四、解决方案五、代码示例 六、回顾一下钩子七、总结 一、keep-alive是什么 keep-alive是Vue中的一个内置组件,会缓存不活动的组件实例。并不会销毁组件&#xff…...

【C++】DICOM医学影像工作站PACS源码

PACS即影像存档与传输系统,是医学影像、数字化图像技术、计算机技术和网络通讯技术相结合的产物,是处理各种医学影像信息的采集、存储、报告、输出、管理、查询的计算机应用程序。 PACS是基于DICOM标准的医学影像管理系统,其模块覆盖了从影像…...

UDP的可靠性传输2

系列文章目录 第一章 UDP的可靠性传输-理论篇(一) 第二章 UDP的可靠性传输-理论篇(二) 文章目录 系列文章目录三、流量控制RTORTT流量控制1.如何控制流量2. 发送方何时在发送数据3.流程图 拥塞控制1.慢启动 总结1.拥塞控制和流量…...

《Java程序设计》实验报告

实验内容:面向对象程序设计 1、定一个名为Person的类,其中含有一个String类型的成员变量name和一个int类型的成员变量age, 分别为这两个变量定义访问方法和修改方法,另外再为该类定义一个名为speak的方法, 在其中输出n…...

数据可视化、BI和数字孪生软件:用途和特点对比

在现代企业和科技领域,数据起着至关重要的作用。为了更好地管理和理解数据,不同类型的软件工具应运而生,其中包括数据可视化软件、BI(Business Intelligence)软件和数字孪生软件。虽然它们都涉及数据,但在功…...

Ros noetic 机器人坐标记录运动路径和发布 实战教程(C)

前言: 承接上一篇博文本文将编写并记录上文中详细的工程项目,用于保存小车的运动路径,生成对应的csv,和加载所保存的路径到实际的Rviz中,本文将开源完整的工程项目,工程结构如下: 工程原码位于文章末尾: 路径存储: waypoint_saver 用于存储 waypoint 的节点 waypo…...

Linux入门之多线程|线程的同步|生产消费模型

文章目录 一、多线程的同步 1.概念 2.条件变量 2.1条件变量概念 2.2条件变量接口 1.条件变量初始化 2.等待条件满足 3.唤醒等待 3.销毁条件变量 2.3条件变量demo 二、生产消费模型 1.生产消费模型 2.基于BlockQueue的生产者消费者模型 3.基于C用条件变量和互斥锁实…...

MATLAB解析和保存ini文件

1. 将ini文件转换成struct结构体 function data ini2struct(filename)fid fopen(filename, r);if fid -1error(Unable to open file %s., filename);enddata struct();section ;while ~feof(fid)line fgetl(fid);line strtrim(line);% 如果是注释行或者空行&#xff0c…...

模型压缩-对模型结构进行优化

模型压缩-对模型结构进行优化 概述 模型压缩通常都是对推断过程而言,训练过程的计算代价通常不考虑,因为GPU可以快速完成任意复杂度模型的训练对于推断过程来说,模型应用才是对于速度敏感的场景多数情况下 希望使用尽可能少的能耗完成京可能…...

软件工程课件

软件工程 考点概述软件工程概述能力成度模型能力成熟度模型集成软件过程模型逆向工程![ ](https://img-blog.csdnimg.cn/425cea8190fb4c5ab2bf7be5e2ad990e.png) 考点概述 重点章节 软件工程概述 之前老版教程的,之前考过 能力成度模型 记忆 能力等级 和 特点 能力…...

基于ADS的marx雪崩电路设计-设计实践(射频脉冲源)

基于ADS的marx雪崩电路设计-设计实践(射频脉冲源) 设计一个ns级别的脉冲源,属于是半路转行的,虽然不了解具体原理但是也可以进行设计。具体的设计理论以及优化方法将在之后进行讨论. 参考文献:基于Marx电路的亚纳秒级…...

X86_64函数调用汇编程序分析

X86_64函数调用汇编程序分析 1 X86_64寄存器使用标准2 对应代码的分析2.1 main函数及其对应的汇编程序2.1.1 main的C代码实现2.1.2 main函数对应汇编及其分析2.1.3 执行完成之后栈的存放情况 2.2 test_fun_a函数及其对应的汇编程序2.2.1 test_fun_a函数的C实现2.2.2 test_fun_a…...

Vue3【Provide/Inject】

前言 自从使用了Provide/Inject代码的组织方式更加灵活了,但是这个灵活性的增加伴随着代码容错性的降低。我相信只要是真的在项目中引入Provide/Inject的同学,一定一定有过或者正在经历下面的状况: 注入名(Injection key&#x…...

Go-Python-Java-C-LeetCode高分解法-第四周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C Go-Python-Java-C-LeetCode高分解法-第一周合集 Go-Python-Java-C-LeetCode高分解法-第二周合集 Go-Python-Java-C-LeetCode高分解法-第三周合集 本…...

vue路由

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...