2022最新版关于Zookeeper的面试题目

Posted 出世&入世

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022最新版关于Zookeeper的面试题目相关的知识,希望对你有一定的参考价值。

一、什么是ZAB协议

ZAB协议是Zookeeper⽤来实现⼀致性的原⼦⼴播协议,该协议描述了Zookeeper是如何实现⼀致性的,分为三个阶段:

  1. 领导者选举阶段:从Zookeeper集群中选出⼀个节点作为Leader,所有的写请求都会由Leader节点来处理
  2. 数据同步阶段:集群中所有节点中的数据要和Leader节点保持⼀致,如果不⼀致则要进⾏同步
  3. 请求⼴播阶段:当Leader节点接收到写请求时,会利⽤两阶段提交来⼴播该写请求,使得写请求像 事务⼀样在其他节点上执⾏,达到节点上的数据实时⼀致

但值得注意的是,Zookeeper只是尽量的在达到强⼀致性,实际上仍然只是最终⼀致性的。

二、为什么Zookeeper可以⽤来作为注册中心

可以利⽤Zookeeper的临时节点和watch机制来实现注册中⼼的⾃动注册和发现,另外Zookeeper中的数据都是存在内存中的,并且Zookeeper底层采⽤了nio,多线程模型,所以Zookeeper的性能也是⽐较⾼的,所以可以⽤来作为注册中⼼,但是如果考虑到注册中⼼应该是注册可⽤性的话,那么Zookeeper 则不太合适,因为Zookeeper是CP的,它注重的是⼀致性,所以集群数据不⼀致时,集群将不可⽤,所 以⽤Redis、Eureka、Nacos来作为注册中心将更合适。

三、Zookeeper中的领导者选举的流程是怎样的?

对于Zookeeper集群,整个集群需要从集群节点中选出⼀个节点作为Leader,⼤体流程如下:

  1. 集群中各个节点⾸先都是观望状态(LOOKING),⼀开始都会投票给⾃⼰,认为⾃⼰⽐较适合作为leader
  2. 然后相互交互投票,每个节点会收到其他节点发过来的选票,然后pk,先⽐较zxid,zxid⼤者获胜,zxid如果相等则⽐较myid,myid⼤者获胜
  3. ⼀个节点收到其他节点发过来的选票,经过PK后,如果PK输了,则改票,此节点就会投给zxid或 myid更⼤的节点,并将选票放⼊⾃⼰的投票箱中,并将新的选票发送给其他节点
  4. 如果pk是平局则将接收到的选票放⼊⾃⼰的投票箱中
  5. 如果pk赢了,则忽略所接收到的选票
  6. 当然⼀个节点将⼀张选票放⼊到⾃⼰的投票箱之后,就会从投票箱中统计票数,看是否超过⼀半的节点都和⾃⼰所投的节点是⼀样的,如果超过半数,那么则认为当前⾃⼰所投的节点是leader
  7. 集群中每个节点都会经过同样的流程,pk的规则也是⼀样的,⼀旦改票就会告诉给其他服务器,所以最终各个节点中的投票箱中的选票也将是⼀样的,所以各个节点最终选出来的leader也是⼀样的,这样集群的leader就选举出来了

四、Zookeeper集群中节点之间数据是如何同步的

  1. ⾸先集群启动时,会先进⾏领导者选举,确定哪个节点是Leader,哪些节点是Follower和Observer
  2. 然后Leader会和其他节点进⾏数据同步,采⽤发送快照和发送Diff⽇志的⽅式
  3.     集群在⼯作过程中,所有的写请求都会交给Leader节点来进⾏处理,从节点只能处理读请求
  4. Leader节点收到⼀个写请求时,会通过两阶段机制来处理
  5. Leader节点会将该写请求对应的⽇志发送给其他Follower节点,并等待Follower节点持久化⽇志成 功
  6. Follower节点收到⽇志后会进⾏持久化,如果持久化成功则发送⼀个Ack给Leader节点
  7. 当Leader节点收到半数以上的Ack后,就会开始提交,先更新Leader节点本地的内存数据
  8. 然后发送commit命令给Follower节点,Follower节点收到commit命令后就会更新各⾃本地内存数 据
  9. 同时Leader节点还是将当前写请求直接发送给Observer节点,Observer节点收到Leader发过来的 写请求后直接执⾏更新本地内存数据
  10. 最后Leader节点返回客户端写请求响应成功
  11. 通过同步机制和两阶段提交机制来达到集群中节点数据⼀致

以上是关于2022最新版关于Zookeeper的面试题目的主要内容,如果未能解决你的问题,请参考以下文章

最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper

Java面试题超详细讲解系列之十九Zookeeper篇

2021最新Java面试题目解答,论程序员成长的正确姿势

2022最新SpringMVC面试题附完整答案

2022年Java秋招面试,程序员求职必看的ZooKeeper面试题

2022最新SpringBoot面试题附完整答案