【040期】JavaEE面试题(十二):ZooKeeper(1)
【032期】JavaEE面试题(四)Spring(2)
开篇介绍
大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaEE系列的第十二篇,主要总结了ZooKeeper相关的问题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
Q:
ZooKeeper是什么?
ZooKeeper是一个开放源码的分布式协调服务
,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。
Zookeeper保证了如下分布式一致性特性:
顺序一致性
原子性
单一视图
可靠性
实时性(最终一致性)
客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理。对于写请求,这些请求会同时发给其他zookeeper机器并且达成一致后,请求才会返回成功。因此,随着zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。
有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为zxid(Zookeeper Transaction Id)
。而读请求只会相对于更新有序,也就是读请求的返回结果中会带有这个zookeeper最新的zxid。
Q:
ZooKeeper和dubbo的区别?
dubbo:
是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。
zookeeper和 dubbo的关系:
Dubbo将注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有 ZooKeeper, Memcached, Redis等。
注意:这里的 dubbo只是一个框架,这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,可以用zk,也可以用别的。
Q:
Zookeeper的java客户端都有哪些?
zk自带的 zkclient
Apache开源的 Curator
Q:
ZooKeeper提供了什么?
文件系统
通知机制
Q:
说说ZooKeeper文件系统
Zookeeper提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。
Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得 Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。
Q:
说说ZAB协议?
ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议
。
ZAB协议包括两种基本的模式:崩溃恢复
和消息广播
。
当整个zookeeper集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与Leader服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式,首先选举产生新的Leader服务器,然后集群中Follower服务器开始与新的Leader服务器进行数据同步,当集群中超过半数机器与该Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。
Q:
Znode有哪些类型?
PERSISTENT-持久节点
除非手动删除,否则节点一直存在于Zookeeper上EPHEMERAL-临时节点
临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。PERSISTENT_SEQUENTIAL-持久顺序节点
基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。EPHEMERAL_SEQUENTIAL-临时顺序节点
基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
Q:
Zookeeper节点宕机如何处理?
Zookeeper本身也是集群,推荐配置不少于3个服务器
。Zookeeper自身也要保证当一个节点宕机时,其他节点会继续提供服务。
如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失;
如果是一个Leader宕机,Zookeeper会选举出新的Leader。
ZK集群的机制是只要超过半数的节点正常,集群就能正常提供服务。
只有在ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。
所以:
3个节点的cluster可以挂掉1个节点(leader可以得到2票>1.5)
2个节点的cluster不能挂掉任何1个节点(leader可以得到1票<=1)
Q:
Zookeeper有哪几种几种部署模式?
三种部署模式:
单机部署
:一台集群上运行集群部署
:多台集群运行伪集群部署
:一台集群启动多个 Zookeeper实例运行
Q:
Zookeeper的典型应用场景?
Zookeeper是一个典型的发布/订阅模式
的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。
通过对 Zookeeper中丰富的数据节点进行交叉使用,配合 Watcher事件通知机制
,可以非常方便的构建一系列分布式应用,会涉及的核心功能:
数据发布/订阅
负载均衡
命名服务
分布式协调/通知
集群管理
Master选举
分布式锁
分布式队列
“一个专注于分享各类Java面试题的号主,长按二维码关注我吧 ”
祝大家都能拿到心仪的offer!
等风也等你
文章都看完了不点个 吗