1. 首页
  2. IT资讯

好程序员Java教程之ZooKeeper面试题梳理汇总

程序员 Java 教程 之ZooKeeper 面试题梳理汇总 , 随着疫情的好转,各大企业开始以远程面试的形式进行人才招聘,而Java 行业依旧是需求量最大的人群,但招聘要求却有很大提高。有学员担心无法通过企业面试,其实只要你技能过关、表现良好,高薪就不是问题。接下来的 好程序员 Java 就业指导小编就给大家分享 ZooKeeper 相关的面试题。

好程序员Java教程之ZooKeeper面试题梳理汇总

ZooKeeper 是什么 ?

ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

分布式应用程序可以基于Zookeeper 实现诸如数据发布 / 订阅、负载均衡、命名服务、分布式协调 / 通知、集群管理、 Master 选举、分布式锁和分布式队列等功能。 Zookeeper 保证分布式一致性特性:顺序一致性、原子性、单一视图、可靠性、实时性 ( 最终一致性 ) 。

ZooKeeper 负载均衡和 nginx 负载均衡区别

ZooKeeper

1) 不存在单点问题, zab 机制保证单点故障可重新选举一个 leader;

2) 只负责服务的注册与发现,不负责转发,减少一次数据交换 ( 消费方与服务方直接通信 );

3) 需要自己实现相应的负载均衡算法。

nginx

1)) 存在单点问题,单点负载高数据量大 , 需要通过 KeepAlived+LVS 备机实现高可用 ;

2) 每次负载,都充当一次中间人转发角色,增加网络负载量 ( 消费方与服务方间接通信 );

3) 自带负载均衡算法。

Zookeeper Watcher 机制 — 数据变更通知

Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher ,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。

工作机制:

客户端注册watcher

服务端处理watcher

客户端回调watcher

ZooKeeper 是如何保证事务的顺序一致性的 ?

ZooKeeper 采用了全局递增的事务 Id 来标识,所有的 proposal( 提议 ) 都在被提出的时候加上了 zxid , zxid 实际上是一个 64 位的数字,高 32位是 epoch( 时期 ; 纪元 ; 世 ; 新时代 ) 用来标识 leader 周期,如果有新的 leader 产生出来, epoch 会自增,低 32 位用来递增计数。当新产生proposal 的时候,会依据数据库的两阶段过程,首先会向其他的 server 发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。

Zookeeper 对节点的 watch 监听通知是永久的吗 ?

不是。官方声明:一个Watch 事件是一个一次性的触发器,当被设置了 Watch 的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch 的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。

一般是客户端执行getData(“/ 节点 A”,true) ,如果节点 A 发生了变更或删除,客户端会得到它的 watch 事件,但是在之后节点 A 又发生了变更,而客户端又没有设置 watch 事件,就不再给客户端发送。

在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

ZK 节点宕机如何处理 ?

Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。 Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。

如果是一个Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数据是有多个副本的,数据并不会丢失 ;

如果是一个Leader 宕机, Zookeeper 会选举出新的 Leader 。

ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK 节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。

所以:

3 个节点的 cluster 可以挂掉 1 个节点 (leader 可以得到 2 票 >1.5);

2 个节点的 cluster 就不能挂掉任何 1 个节点了 (leader 可以得到 1 票 <=1) 。

了解更多ZooKeeper 面试题,你可以关注 “ 好程序员 ” 微信公众号,定期发布技术热点和求职趋势分析。你也可以来 好程序员 Java 培训班进行系统的学习提升,跟随大牛讲师迅速掌握扎实技术、积累项目经验 !

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/196626.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code