2022最新版关于Zookeeper的面试题目
Posted 出世&入世
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022最新版关于Zookeeper的面试题目相关的知识,希望对你有一定的参考价值。
一、什么是ZAB协议
ZAB协议是Zookeeper⽤来实现⼀致性的原⼦⼴播协议,该协议描述了Zookeeper是如何实现⼀致性的,分为三个阶段:
- 领导者选举阶段:从Zookeeper集群中选出⼀个节点作为Leader,所有的写请求都会由Leader节点来处理
- 数据同步阶段:集群中所有节点中的数据要和Leader节点保持⼀致,如果不⼀致则要进⾏同步
- 请求⼴播阶段:当Leader节点接收到写请求时,会利⽤两阶段提交来⼴播该写请求,使得写请求像 事务⼀样在其他节点上执⾏,达到节点上的数据实时⼀致
但值得注意的是,Zookeeper只是尽量的在达到强⼀致性,实际上仍然只是最终⼀致性的。
二、为什么Zookeeper可以⽤来作为注册中心
可以利⽤Zookeeper的临时节点和watch机制来实现注册中⼼的⾃动注册和发现,另外Zookeeper中的数据都是存在内存中的,并且Zookeeper底层采⽤了nio,多线程模型,所以Zookeeper的性能也是⽐较⾼的,所以可以⽤来作为注册中⼼,但是如果考虑到注册中⼼应该是注册可⽤性的话,那么Zookeeper 则不太合适,因为Zookeeper是CP的,它注重的是⼀致性,所以集群数据不⼀致时,集群将不可⽤,所 以⽤Redis、Eureka、Nacos来作为注册中心将更合适。
三、Zookeeper中的领导者选举的流程是怎样的?
对于Zookeeper集群,整个集群需要从集群节点中选出⼀个节点作为Leader,⼤体流程如下:
- 集群中各个节点⾸先都是观望状态(LOOKING),⼀开始都会投票给⾃⼰,认为⾃⼰⽐较适合作为leader
- 然后相互交互投票,每个节点会收到其他节点发过来的选票,然后pk,先⽐较zxid,zxid⼤者获胜,zxid如果相等则⽐较myid,myid⼤者获胜
- ⼀个节点收到其他节点发过来的选票,经过PK后,如果PK输了,则改票,此节点就会投给zxid或 myid更⼤的节点,并将选票放⼊⾃⼰的投票箱中,并将新的选票发送给其他节点
- 如果pk是平局则将接收到的选票放⼊⾃⼰的投票箱中
- 如果pk赢了,则忽略所接收到的选票
- 当然⼀个节点将⼀张选票放⼊到⾃⼰的投票箱之后,就会从投票箱中统计票数,看是否超过⼀半的节点都和⾃⼰所投的节点是⼀样的,如果超过半数,那么则认为当前⾃⼰所投的节点是leader
- 集群中每个节点都会经过同样的流程,pk的规则也是⼀样的,⼀旦改票就会告诉给其他服务器,所以最终各个节点中的投票箱中的选票也将是⼀样的,所以各个节点最终选出来的leader也是⼀样的,这样集群的leader就选举出来了
四、Zookeeper集群中节点之间数据是如何同步的
- ⾸先集群启动时,会先进⾏领导者选举,确定哪个节点是Leader,哪些节点是Follower和Observer
- 然后Leader会和其他节点进⾏数据同步,采⽤发送快照和发送Diff⽇志的⽅式
- 集群在⼯作过程中,所有的写请求都会交给Leader节点来进⾏处理,从节点只能处理读请求
- Leader节点收到⼀个写请求时,会通过两阶段机制来处理
- Leader节点会将该写请求对应的⽇志发送给其他Follower节点,并等待Follower节点持久化⽇志成 功
- Follower节点收到⽇志后会进⾏持久化,如果持久化成功则发送⼀个Ack给Leader节点
- 当Leader节点收到半数以上的Ack后,就会开始提交,先更新Leader节点本地的内存数据
- 然后发送commit命令给Follower节点,Follower节点收到commit命令后就会更新各⾃本地内存数 据
- 同时Leader节点还是将当前写请求直接发送给Observer节点,Observer节点收到Leader发过来的 写请求后直接执⾏更新本地内存数据
- 最后Leader节点返回客户端写请求响应成功
- 通过同步机制和两阶段提交机制来达到集群中节点数据⼀致
以上是关于2022最新版关于Zookeeper的面试题目的主要内容,如果未能解决你的问题,请参考以下文章
最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper