大数据学习(63)- Zookeeper详解

news2025/7/12 22:54:23

&&大数据学习&&

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

🍋一、zookeeper概念


Zookeeper是 Apache Hadoop项目下的一个子项目,是一个树形目录服务。

Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,简称zk

ZooKeeper 是一个分布式的、开源的协调服务,主要用于解决分布式系统中的一致性问题。它提供了一个简单而强大的接口,帮助开发者在分布式环境中实现诸如配置管理、命名服务、分布式锁、集群管理等功能。

🍋二、ZooKeeper 的架构

ZooKeeper 采用 主从架构,包含以下角色:

  1. Leader

    负责处理写请求和事务操作。通过选举机制产生。(ZooKeeper 的选举机制主要用于其集群管理,特别是在集群启动或领导者节点故障时,用于选出一个新的领导者节点。这个领导者节点将负责处理客户端的请求、维护集群状态以及与其他节点进行通信。)
  2. Follower

    处理读请求,并将写请求转发给 Leader。参与 Leader 选举。
  3. Observer(可选)

    与 Follower 类似,但不参与选举,用于扩展读性能。
  4. Client

    与 ZooKeeper 集群交互的客户端。

🍋三、zookeeper提供的主要功能

1、配置管理


在多个应用程序(或服务器)中,假如存在一些相同的配置信息,在对该配置信息进行修改时,我们需要一个一个进行修改,这样会大大增加维护的成本,不方便管理。这时如果使用一个专门放配置中心的组件,将相同的配置信息放在配置中心,需要的时候直接拉取,这样可以大大节约维护的成本, 而zookeeper即可实现配置中心的功能。

2.分布式锁


        在多个用户访问同一台主机上的应用程序数据时,我们可以通过加锁解决并发操作的问题,但是如果有多台主机相同的应用程序要访问同一数据时,这个时候我们在一台主机上加锁是不能解决另一台主机的并发问题的,换句话说自己的锁只对自己有效并不影响别的 ,这个时候就需要分布式锁解决这类问题,我个人理解分布式锁像是从所有主机中抽取出来的一把锁,或者是有一把总锁对所有主机都有效。zookeeper可以实现分布式锁的功能。

        分布式锁允许在多个服务实例之间协调对共享资源的访问。在分布式环境中,传统的单机锁机制(如线程锁)无法跨进程或跨服务器工作,因此需要使用分布式锁来确保在同一时间只有一个服务实例能够访问或修改共享资源,从而避免数据竞争和数据不一致的问题。

3.分布式应用协调

        分布式事务:ZooKeeper 可以用于实现分布式事务的协调,确保多个分布式节点能够协同工作,完成复杂的事务操作。

        分布式选举:ZooKeeper 可以用于实现分布式系统中的领导者选举,确保在集群中只有一个节点担任领导者角色。

选举过程大致如下

  1. 集群启动或领导者故障:当 ZooKeeper 集群启动时,或者当前的领导者节点因为某种原因(如崩溃或网络分区)无法继续工作时,集群会进入选举状态。

  2. 服务器状态转换:集群中的每个服务器都会将自己的状态转换为 LOOKING,表示正在寻找领导者。

  3. 投票过程

    • 每个服务器都会为自己投一票,并将自己的投票信息(包括服务器ID和ZXID,ZXID是ZooKeeper的事务ID,用于标识服务器的版本和状态)发送给集群中的其他服务器。
    • 服务器会收集来自其他服务器的投票,并根据一定的规则(如ZXID的大小和服务器ID的大小)来决定是否接受其他服务器的投票。
    • 如果一个服务器发现自己的投票能够赢得多数(即超过半数的服务器投票给自己),它就会成为领导者。
  4. 领导者确认:一旦选举出领导者,领导者会向集群中的其他服务器发送通知,确认自己的领导地位。其他服务器在收到领导者的通知后,会将自己的状态转换为 FOLLOWING 或 OBSERVER(对于观察者节点),并开始跟随领导者工作。

  5. 故障恢复:如果领导者节点在工作过程中出现故障,集群会重新进入选举状态,选举出一个新的领导者。

4. 组服务

组成员管理:ZooKeeper 可以管理分布式系统中的组成员信息,如节点的加入、离开和更新。

负载均衡:通过组成员管理,ZooKeeper 可以帮助实现分布式系统中的负载均衡和故障恢复。

🍋四、使用场景

1. 分布式数据库

元数据信息管理

  • 定义:在分布式数据库中,元数据是指描述数据库结构、配置、权限等信息的数据。
  • ZooKeeper 作用:ZooKeeper 可以用于集中存储和管理分布式数据库的元数据。例如,数据库管理员可以在 ZooKeeper 中创建节点来存储数据库表的结构信息、索引信息、权限设置等。
  • 优势:通过 ZooKeeper,数据库管理员可以方便地查看和修改元数据,同时 ZooKeeper 的数据一致性保证确保所有节点都能获取到最新的元数据信息。

节点状态信息管理

  • 定义:节点状态信息指的是分布式数据库中各个节点的运行状态、负载情况等信息。
  • ZooKeeper 作用:ZooKeeper 可以跟踪分布式数据库集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个数据库节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
  • 优势:数据库管理员可以通过 ZooKeeper 实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。

2. 分布式消息队列

元数据管理

  • 定义:在分布式消息队列中,元数据包括队列的配置信息、消费者的消费位点等。
  • ZooKeeper 作用:ZooKeeper 可以存储和管理消息队列的元数据。例如,消息队列系统可以在 ZooKeeper 中创建节点来存储队列的名称、消费者的消费位点等信息。
  • 优势:通过 ZooKeeper,消息队列系统可以实现元数据的集中管理和动态更新,方便管理员进行配置和监控。

消费者协调

  • 定义:在分布式消息队列中,消费者协调指的是多个消费者如何共同消费消息,避免消息重复消费或消息丢失。
  • ZooKeeper 作用:ZooKeeper 可以用于实现消费者协调。例如,通过 ZooKeeper 的分布式锁机制,可以确保同一时间只有一个消费者能够处理某个消息,从而避免消息重复消费。同时,ZooKeeper 还可以用于实现消费者的负载均衡,将消息均匀分配给不同的消费者。
  • 优势:通过 ZooKeeper,消息队列系统可以实现高效、可靠的消费者协调,提高消息处理的效率和稳定性。

3. 服务发现和注册

服务注册

  • 定义:服务注册是指将服务实例的信息(如服务名称、地址、端口等)注册到注册中心,以便其他服务能够发现和调用。
  • ZooKeeper 作用:ZooKeeper 可以作为服务注册中心,允许服务提供者将自己的服务信息注册到 ZooKeeper 中。例如,服务提供者可以在 ZooKeeper 中创建一个节点来存储自己的服务信息。
  • 优势:通过 ZooKeeper,服务提供者可以方便地将自己的服务注册到注册中心,实现服务的动态发布和更新。

服务发现

  • 定义:服务发现是指服务消费者从注册中心获取可用的服务实例信息,以便进行服务调用。
  • ZooKeeper 作用:ZooKeeper 可以帮助服务消费者从注册中心获取可用的服务实例信息。例如,服务消费者可以监听 ZooKeeper 中与服务名称相关的节点,当有新的服务实例注册或已有的服务实例下线时,ZooKeeper 会通知服务消费者。
  • 优势:通过 ZooKeeper,服务消费者可以实时获取可用的服务实例信息,实现服务的动态发现和调用。

4. 分布式缓存

数据一致性协调

  • 定义:在分布式缓存中,数据一致性指的是多个缓存节点之间的数据保持一致。
  • ZooKeeper 作用:ZooKeeper 可以用于协调分布式缓存的一致性。例如,当某个缓存节点更新数据时,可以在 ZooKeeper 中创建一个节点来存储更新后的数据版本信息。其他缓存节点可以监听这个节点,当数据版本发生变化时,及时更新自己的缓存数据。
  • 优势:通过 ZooKeeper,分布式缓存系统可以实现高效、可靠的数据一致性协调,确保多个缓存节点之间的数据保持一致。

节点状态监控

  • 定义:节点状态监控是指对分布式缓存中的各个节点进行状态监控,以便及时发现和处理故障节点。
  • ZooKeeper 作用:ZooKeeper 可以跟踪分布式缓存集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个缓存节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
  • 优势:通过 ZooKeeper,分布式缓存系统可以实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。

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

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

相关文章

嵌入式八股C语言---面向对象篇

面向对象与面向过程 面向过程 就是把整个业务逻辑分成多个步骤,每步或每一个功能都可以使用一个函数来实现面向对象 对象是类的实例化,此时一个类就内部有属性和相应的方法 封装 在C语言里实现封装就是实现一个结构体,里面包括的成员变量和函数指针,然后在构造函数中,为结构体…

C# ListView设置标题头背景颜色和字体颜色

一、向ListView 添加数据 for (int i 1; i < 5; i) {ListViewItem litem new ListViewItem("data:"i);lv_WarnList.Items.Add(litem); }如果需要在ListView中绑定实体类对象的话&#xff0c;需要将数据放在Tag属性里 for (int i 1; i < 5; i) {AngleData …

嵌入式 ARM Linux 系统构成(6):应用层(Application Layer)

目录 一、应用层概述 二、应用层的核心组成 2.1 主应用程序&#xff08;Main Applications&#xff09; 2.2 系统服务&#xff08;System Services&#xff09; 2.3 用户界面&#xff08;User Interface&#xff09; 2.4 脚本与自动化工具 2.5 第三方库与框架 2.6 通信…

【HTML】一、基础标签

文章目录 1、开发环境准备2、html介绍3、html基本骨架4、标签的关系5、常用标签5.1 标题5.2 段落5.3 换行与水平线5.4 文本格式化标签5.5 图像标签5.6 超链接标签5.7 音频标签5.8 视频标签 6、路径7、网页制作 1、开发环境准备 在编辑器中写代码&#xff0c;在浏览器中看效果 …

centos7通过yum安装redis

centos7通过yum安装redis 1.安装redis数据库 yum install -y redis2.启动redis服务 systemctl start redis3.查看redis状态 systemctl status redis4、停止服务 systemctl stop redis5、重启服务 systemctl restart redis6、查看redis进程 ps -ef | grep redis7、开放端…

AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践

背景 在数字化转型进程中&#xff0c;用户交互行为产生的多维度数据已成为企业的重要战略资产。以短视频平台为例&#xff0c;基于用户点赞事件的实时推荐算法能显著提升用户活跃度和平台粘性。这类实时数据主要通过 Apache Kafka 流处理平台进行传输&#xff0c;通过其扇出&a…

【Help Manual】导出PDF中英文不在一行解决方案

在使用Help Manual 的时候&#xff0c;会出现导出PDF时&#xff0c;中英文在同一行出现水平不对齐的问题。如下&#xff1a; 解决方案&#xff1a; 结果如下&#xff1a;

Scala编程_实现Rational的基本操作

在Scala中实现一个简单的有理数&#xff08;Rational&#xff09;类&#xff0c;并对其进行加法、比较等基本操作. 有理数的定义 有理数是可以表示为两个整数的比值的数&#xff0c;通常形式为 n / d&#xff0c;其中 n 是分子&#xff0c;d 是分母。为了确保我们的有理数始终…

用python和Pygame库实现“跳过障碍”游戏

用python和Pygame库实现“跳过障碍”游戏 游戏开发 跳过障碍游戏流程说明&#xff1a; 启动游戏后显示开始界面&#xff08;包含游戏说明&#xff09; 按空格键进入游戏 游戏过程中躲避障碍物获取分数 碰撞后显示结束界面&#xff08;包含最终得分&#xff09; 按空格键…

SqlServer数据库报错紧急或可疑无法访问的修复过程,亲测有效。

当 SQL Server 数据库被标记为 SUSPECT 状态时&#xff0c;表示数据库可能由于事务日志损坏、数据文件丢失或其他严重问题而无法正常启动。以下是一个详细的恢复步骤&#xff0c;基于搜索结果中的信息和常见的最佳实践&#xff1a; 恢复步骤 1. 确认数据库状态 将database-n…

【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动

目录 一、前期准备 1.1 插入设备 1.2 安装atx-agent 二、解决报错&#xff1a;无法提供服务&#xff0c;非am instrument启动 2.1 出现报错 2.2 尝试解决 2.3 最终解决 三、开启ATX的悬浮窗权限 一、前期准备 1.1 插入设备 本地插入待执行设备&#xff0c;待执行设备…

子母钟系统,京准电子科技助力高考精准计时

子母钟系统&#xff0c;京准电子科技助力高考精准计时 子母钟系统&#xff0c;京准电子科技助力高考精准计时 【摘要】子母钟系统又叫网络时钟系统是校园网络中一个重要的精准计时系统&#xff0c;随着网络的普及&#xff0c;许多校园都建了自己的校园专网&#xff0c;使用的…

深度解析:主流大模型与智能体框架能力对比及实战指南

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 一、技术演进全景图二、主流大模型能力矩阵1. 闭源模型对比2. 开源模型对比 三、智能体框架深…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上&#xff01; mv指令 m…

第十七:go 反射

fmt.printf("%T"&#xff0c;obj) // 打印 reflect 的类型 fmt.Printf("%T", obj) // *reflect.rtype //打印的是一个指针类型 reflect包 在Go语言中反射的相关功能由内置的reflect包提供&#xff0c;任意接口值在反射中都可以理解为由reflect.Type和…

【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 Spring 框架与 RabbitMQ 的整合主要通过 Spring AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;模块实现&#xff0c;提供了便捷的消息队列开发能力。 引…

Pytorch系列教程:可视化Pytorch模型训练过程

深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解&#xff0c;使我们能够做出合理的决策。训练进度必须可视化的两种方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…

electron+vue+webview内嵌网页并注入js

vue内嵌网页可以使用iframe实现内嵌网页&#xff0c;但是只能通过postMessage间接通信&#xff0c;在electron环境下&#xff0c;vue可以直接使用webview来内嵌网页&#xff0c;支持 executeJavaScript、postMessage、send 等丰富的通信机制。 使用 webview的优势 性能更佳&…

利用OpenResty拦截SQL注入

需求 客户的一个老项目被相关部门检测不安全&#xff0c;报告为sql注入。不想改代码&#xff0c;改项目&#xff0c;所以想到利用nginx去做一些数据校验拦截。也就是前端传一些用于sql注入的非法字符或者数据库的关键字这些&#xff0c;都给拦截掉&#xff0c;从而实现拦截sql…

CAD文件转换为STL

AutoCAD与STL格式简介 AutoCAD软件是由美国欧特克有限公司&#xff08;Autodesk&#xff09;出品的一款自动计算机辅助设计软件&#xff0c;可以用于绘制二维制图和基本三维设计&#xff0c;通过它无需懂得编程&#xff0c;即可自动制图&#xff0c;因此它在全球广泛使用&…