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

大数据技术之Zookeeper(1)

目录

Zookeeper 入门

概述

Zookeeper的主要特点包括:

Zookeeper的应用场景:

Zookeeper的基本概念:

架构:

Zookeeper工作机制

Zookeeper数据结构

Znode(Zookeeper Node)

Znode的类型

Znode路径

Znode属性

Watcher监听器

使用示例

总结


Zookeeper 入门

概述

Zookeeper是一个分布式的、开放源码的协调服务,用于大型应用中管理和协调分布式环境下的进程。它提供了一套简单易用的API接口,使得开发者可以专注于应用程序的核心功能,而不需要关心底层的复杂实现细节。

Zookeeper的主要特点包括:

  1. 一致性:任何一台服务器上的客户端将看到同样的视图。
  2. 原子性:更新要么成功,要么失败,不会出现部分成功的状态。
  3. 单一视图:无论客户端连接到集群中的哪个服务器,其看到的服务视图都是一致的。
  4. 可靠性:一旦一个更新被确认,该更新将会被持久化。
  5. 实时性:客户端能够实时收到状态变更的通知。

Zookeeper的应用场景:

  • 配置管理:集中存储和管理配置信息,简化配置同步过程。
  • 命名服务:为分布式应用中的组件提供统一的命名服务。
  • 集群管理:监控集群中的节点状态,实现动态调整。
  • 分布式锁:提供协调机制,使得多个进程可以互斥地访问共享资源。
  • 队列管理:实现分布式环境中任务的有序处理。

Zookeeper的基本概念:

  • Znode(Zookeeper Node):Zookeeper中的数据单位,类似于文件系统中的文件和目录。
  • 路径:每个znode都有一个唯一的路径来标识它。
  • 临时节点:与会话关联的节点,会话结束时自动删除。
  • 持久节点:创建后一直存在,除非手动删除。
  • 顺序节点:创建时自动获得一个递增的序号作为路径的一部分。

架构:

Zookeeper通常以集群模式运行,集群中的每个服务器节点都保存着相同的数据副本。客户端可以通过任何一个服务器节点进行读写操作,并且能够通过心跳检测机制来保持与服务器之间的连接。

Zookeeper工作机制

Zookeeper的工作机制主要包括以下几个关键点:

  1. 角色和状态

    • 角色:在Zookeeper的集群中,各个节点有领导者(Leader)、跟随者(Follower)和观察者(Observer)三种角色。
    • 状态:服务器的状态包括领导(Leading)、跟随(Following)、观察(Observing)和寻找(Looking)四种状态。
  2. 原子广播:Zookeeper的核心是原子广播,这个机制保证了各个服务器之间的同步。实现这个机制的协议叫做Zab协议(Zookeeper Atomic Broadcast protocol)。Zab协议有两种模式:

    • 恢复模式(Recovery选主):当集群中没有领导者时,所有服务器进入恢复模式,进行领导者选举。
    • 广播模式(Broadcast同步):在领导者选举完成之后,集群进入广播模式,进行正常的读写操作。
  3. 事务ID号(zxid):为了保证事务的顺序一致性,Zookeeper采用了递增的事务ID号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。

  4. Leader选举:当领导者崩溃或者领导者失去大多数的跟随者时,Zookeeper进入恢复模式,需要重新选举出一个新的领导者,让所有的服务器都恢复到一个正确的状态。Zookeeper的选举算法有两种:

    • 基于Basic Paxos实现的
    • 基于Fast Paxos算法实现的

Paxos算法概述:从Basic Paxos到Fast Paxos及在Zookeeper中的应用

  1. Znode数据模型:Zookeeper底层是一个树形结构的数据模型,用于数据的存储。每个节点称为Znode,它可以包含数据以及子节点。Znode有两种类型:持久节点和临时节点。持久节点即使在创建它的客户端会话结束之后仍然存在;临时节点则会在客户端会话结束时被删除。

  2. Watcher监听机制:Zookeeper提供了数据的发布订阅功能,客户端可以注册Watcher来监听特定Znode的变化,如节点内容变化、子节点列表变化等。当被监听的Znode发生改变时,Zookeeper会主动通知客户端。

  3. API应用:Zookeeper提供了一系列的API来支持客户端进行数据的读取、写入、创建节点等操作。

Zookeeper数据结构

Zookeeper的数据结构是一种类似文件系统的层次结构,用于存储和管理数据。这种结构被称为Znode(Zookeeper Node)树。下面是关于Zookeeper数据结构的一些关键点:

Znode(Zookeeper Node)

Znode是Zookeeper中的数据单元,它类似于文件系统中的文件和目录。每个Znode都有一个唯一的路径来标识它,并且可以存储少量的数据(最大限制为1MB)。Znode还可以拥有子节点,就像文件系统中的目录可以包含文件和其他目录一样。

Znode的类型

Znode有两种主要类型:

  1. 持久节点(Persistent Node)

    • 创建后一直存在,直到显式删除。
    • 即使创建它的客户端会话结束,节点仍然保留。
  2. 临时节点(Ephemeral Node)

    • 与创建它的客户端会话绑定。
    • 当客户端会话结束时,该节点自动被删除。

每种类型的节点还可以进一步细分为两种:

  • 顺序节点(Sequential Node)
    • 创建时,Zookeeper会在节点名称的末尾添加一个递增的数字。
    • 这样可以确保节点的创建顺序,并且可以用来实现一些特殊的功能,如分布式锁。

Znode路径

每个Znode都有一个唯一的路径来标识它,路径格式类似于Unix文件系统的路径。例如,/app/config 是一个Znode的路径,表示它位于/app目录下。

Znode属性

除了数据之外,每个Znode还具有一些元数据属性,包括但不限于:

  • Acl(Access Control List):控制哪些客户端可以对该节点执行何种操作。
  • Stat(Status):提供有关节点状态的信息,如版本号、创建时间和最后修改时间等。

Watcher监听器

Zookeeper提供了一种称为Watcher的机制,允许客户端注册监听器来监听特定Znode的更改。当被监听的Znode发生变化时(例如,数据更改、子节点的增加或删除),Zookeeper会异步地通知注册了Watcher的客户端。

使用示例

假设你有一个Zookeeper集群,你可以在根路径/下创建一个持久节点/app,并在其下创建一个临时节点/app/server1。你还可以在/app节点下创建一个带有顺序的子节点/app/leader-0000000001。这样的结构可以用于实现简单的服务发现或者作为分布式锁的基础。

总结

Zookeeper的数据结构是一种层次化的树状结构,由Znode组成。Znode可以存储数据、具有不同的生命周期,并且可以注册Watcher来监听状态变化。这种结构非常适合于构建分布式协调服务,如配置管理、服务发现、分布式锁等。

相关文章:

大数据技术之Zookeeper(1)

目录 Zookeeper 入门 概述 Zookeeper的主要特点包括: Zookeeper的应用场景: Zookeeper的基本概念: 架构: Zookeeper工作机制 Zookeeper数据结构 Znode(Zookeeper Node) Znode的类型 Znode路径 Znode属性 Wa…...

鸿蒙学习(四):泛型空安全模块导入导出

泛型与函数 泛型类型和函数允许创建的代码在各种类型上运行&#xff0c;而不仅支持单一类型。 泛型类和接口(Element) 类和接口可以定义为泛型&#xff0c;将参数添加到类型定义中&#xff0c;如以下示例中的类型参数Element&#xff1a; class CustomStack<Element>…...

无人机(Unmanned Aerial Vehicle, UAV)视觉感知论文汇总

综述类 A Survey of Object Detection for UAVs Based on Deep LearningDeep Learning for UAV-based Object Detection and Tracking&#xff1a;A surveyMoving Target Tracking by Unmanned Aerial Vehicle&#xff1a;A Survey and TaxonomyVision-Based Learning for Dro…...

【ORACLE】 ORA-01691: Lob 段无法通过 8192 (在表空间 XXX_SPACE 中) 扩展

ORA-01691错误通常表示Oracle数据库在尝试扩展LOB段时无法为表空间分配更多的空间。这个问题通常由表空间容量不足引起。根据搜索结果&#xff0c;以下是几种可能的解决方案&#xff1a; 检查并扩大表空间&#xff1a;首先&#xff0c;确认表空间是否已经达到其最大容量。可以使…...

Java之静态代理与动态代理的区别

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f525; 微信&#xff1a;zsqtcyw 联系我领取学习资料 …...

公司内网监控软件有哪些?(2024年10款最新款推荐内网监控软件)

在2024年&#xff0c;公司内网监控软件市场提供了多种选择&#xff0c;以满足不同企业的监控需求。 以下是一些值得推荐的最新款内网监控软件&#xff1a; 1. Performance Monitor 核心功能&#xff1a;不仅是一款局域网监控软件&#xff0c;更是一个全面的内网安全管理解决方…...

CUDA编程07 - 卷积的优化

一:概述 在接下来的几篇文章中,我们将讨论一组重要的并行计算模式。这些模式是许多并行算法的基础,这些算法出现在许多并行应用中。我们将从卷积开始,卷积是一种流行的数组操作,广泛应用于信号处理、数字录音、图像处理、视频处理和计算机视觉等领域。在这些应用领域中,卷…...

解锁高效办公新姿势:SSO单点登录+企业网盘完美搭配

在现代互联网环境中&#xff0c;随着企业业务的不断扩展&#xff0c;多系统、多应用的集成成为常态。为了提升用户体验&#xff0c;减少用户在不同系统间切换的繁琐&#xff0c;单点登录&#xff08;SSO, Single Sign-On&#xff09;技术应运而生。 本文将详细介绍SSO单点登录的…...

[数据集][目标检测]竹子甘蔗发芽缺陷检测数据集VOC+YOLO格式2953张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2953 标注数量(xml文件个数)&#xff1a;2953 标注数量(txt文件个数)&#xff1a;2953 标注…...

RTC碰到LXTAL低频晶振停振怎么办?

GD32F303的RTC模块框图如下图所示&#xff0c;RTC时钟源可选择HXTAL/128、LXTAL或IRC40K&#xff0c;一般为了实现更精准的RTC时间&#xff0c;MCU系统均会外挂32.768KHz LXTAL低频晶振&#xff0c;但由于低频晶振负阻抗较大&#xff0c;不容易起振&#xff0c;若外部电路布线、…...

矩阵中的最大得分(Lc3148)——动态规划

给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&#xff09;。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。 你可以从 任一 单元格开始&#xff0c;并且必须…...

C++ 设计模式(4. 建造者模式)

建造者模式&#xff08;也被成为生成器模式&#xff09;&#xff0c;是一种创建型设计模式&#xff0c;软件开发过程中有的时候需要创建很复杂的对象&#xff0c;而建造者模式的主要思想是将对象的构建过程分为多个步骤&#xff0c;并为每个步骤定义一个抽象的接口。具体的构建…...

Arbitrum 和 Optimism Layer 2 扩展方案对比

Arbitrum 和 Optimism 对比分析 Arbitrum 和 Optimism 是两个以太坊 Layer 2 扩展方案&#xff0c;它们都使用了 Optimistic Rollup 技术来提升以太坊的可扩展性并降低交易成本。虽然它们有着相似的目标&#xff0c;但在架构设计、性能表现和费用结构上各有特点。 一、架构与…...

热门的蓝牙耳机中,哪种类型更受欢迎?四款热度高的开放式耳机

在如今的耳机市场中&#xff0c;开放式耳机异军突起&#xff0c;成为了众多消费者的新宠。如果你还在为传统入耳式耳机带来的不适而烦恼&#xff0c;那么开放式耳机绝对值得你一试。它不仅能让你在享受音乐的同时&#xff0c;依然可以清晰感知周围环境&#xff0c;保障你的安全…...

基于web的亚热带常见自然林病虫害识别系统——总结与展望

文章目录 一、前言二、总结三、展望参考文献致谢一、前言 这个系列也迎来了结尾,最后说一些碎碎念… 二、总结 本文首先简要介绍了卷积神经网络的基本原理,以及在亚热带常见自然林植物识别领域的研究应用现状。 其重点研究了卷积神经网络在亚热带常见自然林植物叶片病害识…...

其他自动重试的注解

除了 Retryable 注解之外&#xff0c;Spring 提供了其他注解用于自动重试方法&#xff0c;主要包括以下几个注解&#xff1a; 1. Recover Recover 注解用于定义重试次数耗尽后执行的恢复方法。当 Retryable 注解的重试次数达到上限时&#xff0c;Recover 方法会被调用。这通常…...

宠物空气净化器哪款能吸毛?希喂、米家宠物空气净化器测评分享

养猫最令人困扰的&#xff0c;就是掉毛与难以彻底消除的异味&#xff0c;这两个问题就成了养猫生活中的一大挑战。每当换季或是猫咪自我梳理时&#xff0c;家中便被一层细腻的绒毛覆盖&#xff0c;从地板到沙发&#xff0c;从床单到衣物&#xff0c;甚至是空气中都漂浮着细小的…...

讲清前端开发(入门)

前端开发&#xff1a;创建用户在网页或应用程序中直接与之交互的部分。 简单来说&#xff0c;就是负责打造用户在使用网站、网页应用或者移动应用时直接看到和与之交互的部分。打个比方&#xff0c;前端开发就像是给房子做装修。房子的框架结构已经有了&#xff0c;但是需要有…...

深入理解MySQL索引:原理、数据结构与优化策略

深入理解MySQL索引&#xff1a;原理、数据结构与优化策略 MySQL 是当今最流行的开源关系型数据库管理系统之一&#xff0c;其强大的性能与灵活的可扩展性使得它广泛应用于各种规模的应用程序中。在数据库的日常操作中&#xff0c;索引起着至关重要的作用&#xff0c;能够极大地…...

mysql数据库基础使用

1、登录mysql ① 本地登录 mysql -u 用户名 -p ②远程登入 mysql -h ip主机地址 -P 端口号 -u 用户名 -p 回车输入密码即可. 2、关于用户操作 ①创建用户 % 代表所有ip都可以访问&#xff0c;可指定主机ip create user 用户名% identified by 密码; ②修改密码 alte…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...