好程序员Java教程之ZooKeeper面试题梳理汇总
好程序员Java教程之ZooKeeper面试题梳理汇总,随着疫情的好转,各大企业开始以远程面试的形式进行人才招聘,而Java行业依旧是需求量最大的人群,但招聘要求却有很大提高。有学员担心无法通过企业面试,其实只要你技能过关、表现良好,高薪就不是问题。接下来的好程序员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)。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
好程序员Java培训分享零基础学Java能行吗 有哪些难点
相对于很多行业来说,IT开发行业发展前景好、薪资待遇高,已经成为了众多年轻人的选择,因此,越来越多的人选择进入Java开发领域。他们中的绝大多数人都没有编程基础,那么对于零基础学习Java开发的人来说面临的主要难点有哪些呢?下面,好程序员Java培训小编给大家介绍一下。Java初学者从入门到真正的实战开发需要学习的知识点非常多,当你的基础知识未完全掌握的时候,在学习过程中会遇到各种各样的问题,自学的话只能依靠搜索引擎摸索,这个过程是非常艰难的。不过如果顺利入门后,你就会发现,其实Java也并非想象中的那么难。根据以往的观察和积累,小编总结了零基础的同学学习Java共通的难点:1、自学过程中容易走弯路走弯路是初学Java的小伙伴常见的问题。由于大家对Java没有宏观的认识,没有系统的Java学习体系,导致大家在有的已经不流行的知识点上耽误很多的学习时间。2、没有老师答疑学习任何新的知识,难免会遇到无法理解的问题,或者bug,比如环境安装,语法应用等等,本来比较简单的问题,自己摸索却需要耽误非常多的时间。尤其遇到bug的时候,往往自己很难找到里面的错误,或者同样的错误经常遇到,这个时候如果...
- 下一篇
运营商抢占边缘计算先机,风口之下如何发挥5G新能力?
直播:近二十载从业老兵谈金融科技赋能的探索与实践 随着5G商用的逐步推进,能够连接5G商用潜能和下游产业机会的边缘计算(MEC)走向大风口,在工业互联网、自动驾驶、物联网等领域呈现出旺盛的市场需求。IDC预测,到2020年,将有超过500亿个终端与设备联网,40%的数据需要在网络边缘分析、处理与存储。因此,边缘计算市场规模将超万亿元。 面对未来无可限量的5G核心技术之一,三大运营商布局边缘计算,驱动5G网络与各领域新技术的融合发展,实现了5G能力的进一步延伸。 三大运营商竞争布局边缘计算 所谓边缘计算,从本质上而言,是云计算的一个子类,对于边缘计算和云计算的差异,有人曾形象地拿章鱼做了比喻。云计算就像是天上的云,看得见摸不着,像章鱼的大脑,边缘计算则就类似于那些小爪子,一个爪子就是一个小型的机房,更靠近设备端和用户。云计算是把握整体,边缘计算更专注于局部,互相协同,彼此优化补充。 在边缘云运营和管理上,运营商正在加速5G商用,抢占边缘计算风口。 中国移动第一期重点布局智慧城市、智能制造、直播游戏、车联网四大领域。 中国移动2018年就成立了边缘计算开放实验室,搭建一个边缘计算领域联合创...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19