大数据处理之中Zookeeper,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Zookkeeper概述
是一个分布式协调服务的开源框架
本质上是一个分布式的小文件存储系统,提供基于类似文件系统的目录树方式的数据存储。
解决的问题:分布式集群中应用系统一致性问题
特性:
数据全局一致
可靠性:消息被一台服务器接收,则可以被其它服务器接收
顺序性:全局有序和偏序两种,消息发布的顺序性
数据更新的原子性:一次性数据更新成功(半数机器/节点以上)
实时性:在一个时间范围内获取服务器的更新信息,或者失效的信息
Zookeeper集群角色
主节点(Leader):1、集群工作的核心,事务请求(写)的唯一调度和处理者,保证集群事务处理的顺序性。2、集群内部各个服务器的调度者
从节点(Follower):1、处理客户端非事务请求。2、转发事务请求给主节点,3、参与集群主节点选举投票
观察者(Observer):1、更新集群最新状态变化并同步这些状态,对非事务请求进行响应,2
将事务请求转发给主节点。3、不参与主节点选举投票,通常用于不影响集群事务处理能力的前提下提升非事务处理的能力,或集群访问量较大的情况下
Zookeeper集群搭建。。。。。
Zookeeper的数据模型:
与标准文件系统相似,采用树形层次结构,树中的节点被称为Znode,每个节点可以拥有子节点
不同:
1、Znode兼具文件和目录两种特点。
2、Znode具有原子性操作
3、存储数据大小有限制。最大是1M
4、Znode通过路径引用。路径唯一
5、序列化特性。创建节点时会在节点名后添加不断增加 的序列号,其对于父节点来说是唯一的,可以辨别节点创建的先后顺序,是一个10位的数字
节点组成:
stat:状态信息、描述其Znode的版本、权限信息等。
data:与该Znode关联的数据
children:该Znode下的子节点
节点类型:临时节点和永久节点
临时节点:不允许存在子节点
创建Znode时有四种选项:永久节点、临时节点、永久序列化节点、临时序列化节点
节点的属性:
dataVersion:数据版本号
cversion:子节点版本号,子节点变化时值+1
acVersion:版本控制号
cZxid:Znode创建事务的ID
mZid:Zode被修改的事务ID,zk每次变化时会产生一个唯一的事务ID(zxid),具有先后顺序
ctim:节点创建时间戳
mtim:节点最近更新时的时间戳
ephemeralOwner:如果此节点时临时节点,则值是与该节点绑定的sessionid,若不是则值为0
节点操作:
客户端链接:zkCli.sh -sever ip
create [-s][-e] path data,s表示永久节点,e表示临时节点
set path data
delete path data
get path
quota:对节点添加限制,setquota [-n|-b] val path,n表示子节点最大个数,b表示数据值最大长度,val子节点最大个数或数据值最大长度,path节点路径
listquota:查看是否设置限制即指定节点的quota,软性限制(输出警告日志)
delquota:delquota [-n|-b] path 删除指定节点的quota
history:列出历史命令
redo:重新执行命令,与hostory结合使用。redo 命令编号
Zookeeper Watcher(数据订阅/发布模式)
使用watcher(监听)机制实现分布式通知功能,Zookeeper允许客户端向服务端注册一个watcher监听,服务端一些事件触发这个watcher时,服务端会向客户端发送一个事件通知来实现分布式通知的功能。
过程:1、客户端向服务端注册一个监听watcher,2、服务端触发注册的watcher,3、客户端回调watcher得到触发事件情况
watcher机制特点:
一次性触发:事件触发监听后,一个watcher event(监听事件)被发送到对应的客户端,这种效果只有一次,后续再次发生同样的事件,不会再次触发
事件封装: 使用WatcherEvent对象封装服务端事件并传递,包含三个属性,通知状态(keeperState)、事件类型(EventType)、节点路径(Path)
event异步发送:
先注册在触发:连接事件不需要先注册,其它的需要事先注册
shell客户端设置监听(Watcher):
get path watch 注册监听事件
Zookeeper Java API(Zookeeper 操作API)
连接操作、Watcher事件操作::
Zookeeper选举机制
默认采用FastLeaderElection算法,采用投票大于把半数胜出大的逻辑
服务器ID:服务器编号,编号越大在算法中权重越大
选举状态:LOOKING --->竞选状态、FOLLOWIING--->随从状态(参与投票)、OBSERVING--->观察状态(不参与投票)、LEADDING--->领导者状态
数据ID:服务器中存放的最新数据的版本version,数据越大说明版本越新、在选举算法中的权重也越大
逻辑时钟: 投票次数,同一轮选举过程中数值时相同的,
全新集群选举(刚搭建的新集群):每台机器给自己投票,票数过半选举结束,服务器ID大的优先级高
非全新集群的选举(集群提供服务一段时间后进行选举):
选举标准:1、逻辑时钟小的选举结果被忽略,重新投票。2、统一逻辑时钟、数据ID大的胜出。3、数据ID相同的服务器ID大的胜出。
Zookeeper典型应用:
数据发布与订阅(配置中心):
1、小型数据。
2、获取数据的同时还要设置监听,拿到数据后再次设置监听保证监听时刻有效
命名服务:由于Zookeeper节点路径的全局唯一性,对提供服务的对象进行命名,客户端通过应用名字可以获取对应的资源和服务地址,提供者等信息,,如:dubbo将提供的服务地址存储到zk上,映射到对应的服务名称,维护全局的服务地址列表
分布式锁:由于其数据的一致性,锁服务分为:保持独占、控制时序
保持独占:单例锁。将zk的节点看作一把锁,所有的客户端到指定的目录创建节点,同通过创建非序列化的临时节点实现独占性
控制时序:按顺序访问,如队列。同过将zk节点看作一把锁,但这次创建的是序列化临时节点,从而实现全局的时序性
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。