大数据学习(63)- Zookeeper详解
&&大数据学习&&
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
🍋一、zookeeper概念
Zookeeper是 Apache Hadoop项目下的一个子项目,是一个树形目录服务。
Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,简称zk
ZooKeeper 是一个分布式的、开源的协调服务,主要用于解决分布式系统中的一致性问题。它提供了一个简单而强大的接口,帮助开发者在分布式环境中实现诸如配置管理、命名服务、分布式锁、集群管理等功能。
🍋二、ZooKeeper 的架构
ZooKeeper 采用 主从架构,包含以下角色:
-
Leader
负责处理写请求和事务操作。通过选举机制产生。(ZooKeeper 的选举机制主要用于其集群管理,特别是在集群启动或领导者节点故障时,用于选出一个新的领导者节点。这个领导者节点将负责处理客户端的请求、维护集群状态以及与其他节点进行通信。) -
Follower
处理读请求,并将写请求转发给 Leader。参与 Leader 选举。 -
Observer(可选)
与 Follower 类似,但不参与选举,用于扩展读性能。 -
Client
与 ZooKeeper 集群交互的客户端。
🍋三、zookeeper提供的主要功能
1、配置管理
在多个应用程序(或服务器)中,假如存在一些相同的配置信息,在对该配置信息进行修改时,我们需要一个一个进行修改,这样会大大增加维护的成本,不方便管理。这时如果使用一个专门放配置中心的组件,将相同的配置信息放在配置中心,需要的时候直接拉取,这样可以大大节约维护的成本, 而zookeeper即可实现配置中心的功能。

2.分布式锁
在多个用户访问同一台主机上的应用程序数据时,我们可以通过加锁解决并发操作的问题,但是如果有多台主机相同的应用程序要访问同一数据时,这个时候我们在一台主机上加锁是不能解决另一台主机的并发问题的,换句话说自己的锁只对自己有效并不影响别的 ,这个时候就需要分布式锁解决这类问题,我个人理解分布式锁像是从所有主机中抽取出来的一把锁,或者是有一把总锁对所有主机都有效。zookeeper可以实现分布式锁的功能。
分布式锁允许在多个服务实例之间协调对共享资源的访问。在分布式环境中,传统的单机锁机制(如线程锁)无法跨进程或跨服务器工作,因此需要使用分布式锁来确保在同一时间只有一个服务实例能够访问或修改共享资源,从而避免数据竞争和数据不一致的问题。

3.分布式应用协调
分布式事务:ZooKeeper 可以用于实现分布式事务的协调,确保多个分布式节点能够协同工作,完成复杂的事务操作。
分布式选举:ZooKeeper 可以用于实现分布式系统中的领导者选举,确保在集群中只有一个节点担任领导者角色。
选举过程大致如下:
-
集群启动或领导者故障:当 ZooKeeper 集群启动时,或者当前的领导者节点因为某种原因(如崩溃或网络分区)无法继续工作时,集群会进入选举状态。
-
服务器状态转换:集群中的每个服务器都会将自己的状态转换为
LOOKING,表示正在寻找领导者。 -
投票过程:
- 每个服务器都会为自己投一票,并将自己的投票信息(包括服务器ID和ZXID,ZXID是ZooKeeper的事务ID,用于标识服务器的版本和状态)发送给集群中的其他服务器。
- 服务器会收集来自其他服务器的投票,并根据一定的规则(如ZXID的大小和服务器ID的大小)来决定是否接受其他服务器的投票。
- 如果一个服务器发现自己的投票能够赢得多数(即超过半数的服务器投票给自己),它就会成为领导者。
-
领导者确认:一旦选举出领导者,领导者会向集群中的其他服务器发送通知,确认自己的领导地位。其他服务器在收到领导者的通知后,会将自己的状态转换为
FOLLOWING或OBSERVER(对于观察者节点),并开始跟随领导者工作。 -
故障恢复:如果领导者节点在工作过程中出现故障,集群会重新进入选举状态,选举出一个新的领导者。
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,分布式缓存系统可以实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。
相关文章:
大数据学习(63)- Zookeeper详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦🤞 …...
嵌入式八股C语言---面向对象篇
面向对象与面向过程 面向过程 就是把整个业务逻辑分成多个步骤,每步或每一个功能都可以使用一个函数来实现面向对象 对象是类的实例化,此时一个类就内部有属性和相应的方法 封装 在C语言里实现封装就是实现一个结构体,里面包括的成员变量和函数指针,然后在构造函数中,为结构体…...
Android UI性能优化
Android UI性能优化 一、UI性能优化基础 1.1 UI渲染原理 Android系统的UI渲染是通过一个被称为"UI线程"或"主线程"的单线程模型来完成的。系统会以16ms(约60fps)的固定时间间隔发送VSYNC信号,触发UI的渲染流程。如果一帧的处理时间超过16ms,就会出现丢…...
C# ListView设置标题头背景颜色和字体颜色
一、向ListView 添加数据 for (int i 1; i < 5; i) {ListViewItem litem new ListViewItem("data:"i);lv_WarnList.Items.Add(litem); }如果需要在ListView中绑定实体类对象的话,需要将数据放在Tag属性里 for (int i 1; i < 5; i) {AngleData …...
数字统计(信息学奥赛一本通-1096)
【题目描述】 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数…...
嵌入式 ARM Linux 系统构成(6):应用层(Application Layer)
目录 一、应用层概述 二、应用层的核心组成 2.1 主应用程序(Main Applications) 2.2 系统服务(System Services) 2.3 用户界面(User Interface) 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、开发环境准备 在编辑器中写代码,在浏览器中看效果 …...
区块链与去中心化技术
区块链与去中心化技术 核心进展 区块链从加密货币(如比特币)扩展至智能合约和供应链管理。以太坊2.0引入分片技术提升交易吞吐量,而零知识证明(ZKP)增强了隐私保护15。企业级应用如IBM的Food Trust平台通过区块链追踪…...
Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动出错
导致报错的操作 在已安装了oracle11g版本后再安装oracle9i客户端在安装了oracle11g后修改了主机名称 解决方法 修改配置文件的主机名称 可能是因为你的Oracle文件配置的主机名称出了问题,在你的Oarcle安装路径D:\app\lenovo\product\11.2.0\dbhome_1\NETWORK\ADM…...
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 数据入湖的最佳实践
背景 在数字化转型进程中,用户交互行为产生的多维度数据已成为企业的重要战略资产。以短视频平台为例,基于用户点赞事件的实时推荐算法能显著提升用户活跃度和平台粘性。这类实时数据主要通过 Apache Kafka 流处理平台进行传输,通过其扇出&a…...
【Help Manual】导出PDF中英文不在一行解决方案
在使用Help Manual 的时候,会出现导出PDF时,中英文在同一行出现水平不对齐的问题。如下: 解决方案: 结果如下:...
计算机网络:计算机网络的分类
按分布范围分类:广域网,城域网,局域网,个域网 按传输技术分类:广播式网络,点对点网络 按拓扑结构分类:总线型,环形,星形,网状 按传输介质分类:…...
Spring Boot3整合Knife4j(4.5.0)
整体概述 Spring Boot 是用于简化 Spring 应用开发的框架,通过自动配置和约定大于配置原则,能让开发者快速搭建和运行 Spring 应用。Knife4j 是基于 Swagger 增强的 API 文档生成工具,可方便展示和调试 API 接口,生成美观易用的 …...
Scala编程_实现Rational的基本操作
在Scala中实现一个简单的有理数(Rational)类,并对其进行加法、比较等基本操作. 有理数的定义 有理数是可以表示为两个整数的比值的数,通常形式为 n / d,其中 n 是分子,d 是分母。为了确保我们的有理数始终…...
Elasticsearch-07-Elasticsearch Java API Client-Elasticsearch 8.0 的高阶api
文章目录 es8 API基础配置和bean注入高阶使用1:引入elasticsearchClient2:查询所有索引3:查询某个索引4:创建索引5:删除指定索引6:查询索引的映射7:创建索引指定映射8:创建文档使用HashMap作为数据存储容器使用自定义类作为数据存储容器使用外…...
用python和Pygame库实现“跳过障碍”游戏
用python和Pygame库实现“跳过障碍”游戏 游戏开发 跳过障碍游戏流程说明: 启动游戏后显示开始界面(包含游戏说明) 按空格键进入游戏 游戏过程中躲避障碍物获取分数 碰撞后显示结束界面(包含最终得分) 按空格键…...
C/C++中对字符处理的常用函数
C语言中的 ctype.h 头文件提供了一系列字符分类和转换函数,用于高效处理字符相关操作。这些函数通过接受 int 类型参数(需为 unsigned char 或 EOF (-1)值),返回非零值表示条件正确,返回0表示错…...
SqlServer数据库报错紧急或可疑无法访问的修复过程,亲测有效。
当 SQL Server 数据库被标记为 SUSPECT 状态时,表示数据库可能由于事务日志损坏、数据文件丢失或其他严重问题而无法正常启动。以下是一个详细的恢复步骤,基于搜索结果中的信息和常见的最佳实践: 恢复步骤 1. 确认数据库状态 将database-n…...
vue3实现虚拟滚动Vue-Virtual-Scroller
前端优化不可不避的一谈之虚拟滚动:众所周知,滚动是直挺挺的往dom树加东西,如果滚太多滚到万级,渲染过多就会卡顿,而vue-virtual-scroll的灵活懒渲染就能解决这个问题 1,下载与配置 npm install --save v…...
DAY33 贪心算法Ⅱ
122. 买卖股票的最佳时机 II - 力扣(LeetCode) 想到把整体利润分解为每天的利润,就豁然开朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…...
C#核心笔记——(五)框架概述
.NET Ftamework中几乎所有功能都是通过大量的托管类型提供的。这些类型组织在层次化的命名空间中,并打包为一套程序集,与CLR一起构成了.NET平台。 有些.NET类型是由CLR直接使用的,且对于托管宿主环境而言是必不可少的。这些类型位于一个名为…...
HttpMediaTypeNotAcceptableException报错解决,状态码显示为406
当返回类没有添加 getter 和 setter 方法时出现 HTTP 406 错误(Not Acceptable),主要与 Spring 框架处理响应数据的机制以及消息转换器的工作原理有关 (注意前提,你已经添加了json相关库的依赖) 消息转换器…...
网络DNS怎么更改?
访问速度慢或某些网站无法打开?改变网络DNS设置可能会帮助解决这些问题。本文将详细介绍如何更改网络DNS,包括更改的原因、具体步骤。 一、为什么要更改DNS? 更改DNS的原因有很多,以下是一些主要的考虑因素:某些公共DNS服务器的响应速度比…...
【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动
目录 一、前期准备 1.1 插入设备 1.2 安装atx-agent 二、解决报错:无法提供服务,非am instrument启动 2.1 出现报错 2.2 尝试解决 2.3 最终解决 三、开启ATX的悬浮窗权限 一、前期准备 1.1 插入设备 本地插入待执行设备,待执行设备…...
子母钟系统,京准电子科技助力高考精准计时
子母钟系统,京准电子科技助力高考精准计时 子母钟系统,京准电子科技助力高考精准计时 【摘要】子母钟系统又叫网络时钟系统是校园网络中一个重要的精准计时系统,随着网络的普及,许多校园都建了自己的校园专网,使用的…...
大模型中的剪枝、蒸馏是什么意思?
环境: 剪枝 蒸馏 问题描述: 大模型中的剪枝、蒸馏是什么意思? 解决方案: 大模型的剪枝(Pruning)和蒸馏(Distillation)是两种常见的模型优化技术,用于减少模型的大小…...
深度解析:主流大模型与智能体框架能力对比及实战指南
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 一、技术演进全景图二、主流大模型能力矩阵1. 闭源模型对比2. 开源模型对比 三、智能体框架深…...
Linux中的基本指令(下)
目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上! mv指令 m…...
关于矢量数据集图表
ui.Chart.feature.byFeature 函数 ui.Chart.feature.byFeature 是 Google Earth Engine (GEE) 中的一个函数,用于创建图表以可视化 FeatureCollection 中各个特征(features)的属性。它通常生成一个分组柱状图,其中: …...
