搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
技术学习(版主发帖区)
›
面试区
›
技术题有答案
›
阿里面试宝典(十三):Zookeeper
0
0
2
分享
阿里面试宝典(十三):Zookeeper
BGnv5
2020-12-21 21:26:02
发表于
技术题有答案
[显示全部楼层]
只看大图
阅读模式
关闭右栏
0
5196
本帖最后由 BGnv5 于 2020-12-21 21:28 编辑
问题导读:
1、什么是Zookeeper?
2、zk写流程是怎样的?
3、zk的Leader选举机制是怎样的?
上一篇:
阿里面试宝典(十二):工厂模式、控制反转、观察者模式
八、Zookeeper
ZK简述
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出 相应 的反 应 , 从而 实现集群中类似Master/Slave管理模式
存储结构
zookeeper中的数据是按照“树”结构进行存储的。而且znode节点还分为4中不同的类型。
znode
根据本小结第一部分的描述,很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为“znode”。如下如所示:
每一个znode默认能够存储1MB的数据(对于记录状态性质的数据来说,够了)
可以使用zkCli命令,登录到zookeeper上,并通过ls、create、delete、sync等命令操作这些
znode节点znode除了名称、数据以外,还有一套属性:zxid。这套zid与时间戳对应,记录zid不同的状态(后续我们将用到)
那么每个znode结构又是什么样的呢?如下图所示:
此外,znode还有操作权限。如果我们把以上几类属性细化,又可以得到以下属性的细节:
czxid:创建节点的事务的zxid
mzxid:对znode最近修改的zxid
ctime:以距离时间原点(epoch)的毫秒数表示的znode创建时间
mtime:以距离时间原点(epoch)的毫秒数表示的znode最近修改时间
version:znode数据的修改次数cversion:znode子节点修改次数aversion:znode的ACL修改次数
ephemeralOwner:如果znode是临时节点,则指示节点所有者的会话ID;如果不是临时节点,则为零。dataLength:znode数据长度。
numChildren:znode子节点个数。
znode中的存在类型
我们知道了zookeeper内部维护了一套数据结构:由znode构成的集合,znode的集合又是一个树形结构。每一个znode又有很多属性进行描述。并且znode的存在性还分为四类,如下如所示:
znode是由客户端创建的,它和创建它的客户端的内在联系,决定了它的存在性:
PERSISTENT-持久化节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。
PERSISTENT_SEQUENTIAL-持久化顺序编号节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。
EPHEMERAL-临时目录节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点(还有涉及到的子节点)就会被删除。
EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除。
另外,无论是EPHEMERAL还是EPHEMERAL_SEQUENTIAL节点类型,在zookeeper的client异常终止后,节点也会被删除。
应用场景
统一命名服务
负载均衡
统一配置管理
集群管理
服务器动态上下线
写数据流程
Zookeeper提供的是 弱一致性,CAP限制,读的的数据可能不是最新的,如果想读到最新的数据,应该手动调用sync方法从Leader同步数据
Leader选举
ZK的Leader负责同步数据,发起选举
1)半数机制:集群中半数以上机器存活,集群可用。所以zookeeper适合装在奇数台机器上。
2)Zookeeper虽然在配置文件中并没有指定master和slave。但是,zookeeper工作时,是有一个节点为leader,其他则为follower,Leader是通过内部的选举机制临时产生的
3)以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,
所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是
3),所以服务器1、2还是继续保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader。
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。
(5)服务器5启动,同4一样当小弟。
最新经典文章,欢迎关注公众号
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
没找到任何评论,期待你打破沉寂
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
BGnv5
超级版主
关注
78
主题
155
帖子
23
粉丝
TA的主题
阿里面试宝典(十三):Zookeeper
2020-12-21
数仓实时化改造:Hudi on Flink 在顺丰的实践应用
2020-12-21
阿里面试宝典(十二):工厂模式、控制反转、观察者模式
2020-12-17
Flink1.11 源码 | 自定义 Format 消费 Maxwell CDC 数据
2020-12-17
阿里面试宝典(十一):面向切面编程
2020-12-14
24小时热文
互联网大厂年终福利曝光:看看别人家老板怎
矩阵分析引论罗家洪(第四版)
像高手一样发言:七种常见工作场景的说话之
携程允许员工春节回乡办公2个月
数据治理实施方案
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈