温馨提示:这篇文章已超过462天没有更新,请注意相关的内容是否还可用!
摘要:本篇内容围绕每日五道Java面试题中的ZooKeeper篇展开,主要介绍了关于ZooKeeper的相关面试题。通过这些问题,考察应聘者在ZooKeeper方面的知识和经验,包括ZooKeeper的基本概念、集群管理、分布式锁等方面的理解和应用。这些问题的解答有助于了解应聘者在分布式系统领域的能力,以及解决相关问题的能力。
1、ZooKeeper 是什么?
ZooKeeper是一个开源的分布式协调服务,为分布式应用提供一致性服务,它允许分布式应用程序实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能,ZooKeeper的目标是为用户提供简单易用的接口和高效、稳定的系统,同时封装了复杂易出错的关键服务,它保证了分布式一致性特性,如顺序一致性、原子性、单一视图、可靠性和实时性(最终一致性)。
客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理,写请求会同时发给其他zookeeper机器并达成一致后,请求才会返回成功,随着zookeeper的集群机器增多,读请求的吞吐会提高,但写请求的吞吐会下降。
有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,称为zxid(ZookeeperTransaction Id),而读请求只会相对于更新有序,即读请求的返回结果中会带有这个zookeeper最新的zxid。
2、Zookeeper 文件系统
Zookeeper提供了一个多层级的节点命名空间(节点称为znode),与文件系统不同的是,这些节点都可以设置关联的数据,Zookeeper为了高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。
3、Zookeeper如何保证主从节点的状态同步?
Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步,实现这个机制的协议叫做Zab协议,Zab协议有两种模式:恢复模式和广播模式。
恢复模式:当服务启动或在领导者崩溃后,Zab进入恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步后,恢复模式结束,状态同步确保了leader和server具有相同的系统状态。
广播模式:一旦leader与多数follower进行了状态同步后,它就可以开始广播消息,即进入广播状态,当一个server加入ZooKeeper服务时,它会在恢复模式下启动,找到leader并与leader进行状态同步,同步结束后,它也参与消息广播,ZooKeeper服务一直维持在Broadcast状态,直到leader崩溃或失去大部分的支持。
4、四种类型的数据节点Znode
(1)PERSISTENT-持久节点:除非手动删除,否则节点一直存在于Zookeeper上。
(2)EPHEMERAL-临时节点:临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。
(3)PERSISTENT_SEQUENTIAL-持久顺序节点:基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
(4)EPHEMERAL_SEQUENTIAL-临时顺序节点:基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
5、Zookeeper Watcher 机制 – 数据变更通知
Zookeeper允许客户端向服务端的某个Znode注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,服务端会向指定客户端发送一个事件通知,实现分布式的通知功能,然后客户端根据Watcher通知状态和事件类型做出业务上的改变。
工作机制:
(1)客户端注册watcher。
(2)服务端处理watcher。
(3)客户端回调watcher,Watcher特性总结如下:
一次性:无论是服务端还是客户端,一旦一个Watcher被触发,Zookeeper都会将其从相应的存储中移除,这样的设计有效减轻了服务端的压力,Watcher的触发是异步的,并且只能保证最终的一致性而无法保证强一致性,当一个客户端连接到一个新的服务器上时,watch将会被以任意会话事件触发等特性进行了详细说明,如果我的内容对您有帮助,请点赞、评论和收藏,您的支持是我坚持下去的动力!
还没有评论,来说两句吧...