Zookeeper常见面试题整理

1、Zookeeper是什么?

Zookeeper是Apache的一个分布式服务框架,是Apache Hadoop的一个子项目,同时是一个为分布式应用提供了一致性服务的软件,主要是用来解决分布式应用中经常遇到的一些数据管理问题,所提供的功能包括:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

简单来说,zookeeper=文件系统+通知机制

2、介绍一下Zookeeper的存储结构?

在这里插入图片描述
如上图所示,Zookeeper的底层是树形的数据结构来做存储的,它的每一个节点被称为Znode,在Zookeeper中znode是一个和Unix文件系统路径相似的节点,可以向节点中存储数据或者是获取数据。
Zookeeper为了保证高吞吐和低延迟,在内存中维持了树状的的结构,但是这样的结构也让Zookeeper不能用于存放大量的数据,默认的每个Znode节点的数据存放上限为1MB。

3、Zookeeper的文件系统

Zookeeper的内部提供了一种多层级的节点命名空间,同时节点被称为Znode,和文件系统不一样的是,文件系统不能像Znode那样可以设置关联的数据,它只有文件节点可以存放数据,而目录节点不可以。

需要注意的是:Zookeeper的每个Znode最多只能存放1MB的数据。

4、介绍一下Zookeeper四种类型的数据节点Znode。

Zookeeper有四种类型的节点,分别是:持久化顺序节点(PERSISTENT)、持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)、临时目录节点(EPHEMERAL)、临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)。
(1)持久化顺序节点(PERSISTENT)
该节点创建之后,当客户端和Zookeeper断开连接后,该节点依然存在,除非手动删除。
(2)持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
该节点创建时,Zookeeper会给该节点名称添加一个顺序编号,当客户端和Zookeeper断开连接后,该节点依然存在。
(3)临时目录节点(EPHEMERAL)
该节点创建之后,当客户端和Zookeeper断开连接后,该节点就会被删除。
(4)临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
该节点创建时,Zookeeper会给该节点名称添加一个顺序编号,当客户端和Zookeeper断开连接后,该节点就会被删除掉。

5、说一下Zookeeper常用的命令(详解)

Zookeeper常用的命令有:ls、create、get、set、delete
(1)ls命令
基本格式为: ls /path
使用ls命令查看zookeeper节点中的内容,在zookeeper控制客户端中,没有默认列表功能,必须要指定列表资源的位置。比如说:ls / 或者 ls /path
如下图所示:
在这里插入图片描述
这其实和linux操作系统中查看文件内容是类似的。

(2)create命令
基本格式为:create [-e] [-s] /path [data]
使用create命令创建一个新的znode,create [-e] [-s] path data - 创建节点,同时我们可以根据后面的参数创建不同类型的节点。
A、创建持久化目录节点时不需要给定后面任何参数,create /path [data]
比如:create /test 123 ,其意思就是创建了一个持久化目录节点test,节点携带的信息为123,该节点创建后会一直存在,除非手动删除。

B、创建持久化顺序目录节点时,后面需要给定参数-s,create -s /path [data]
比如:create -s /test 456 ,该节点创建后会一直存在,除非手动删除。

C、创建临时目录节点时,后面需要给定参数-e,create -e /path [data]
比如:create -e /ssm 666 ,临时节点只在当前会话生命周期中有效,会话结束节点自动删除。

D、创建临时顺序目录节点时,后面需要给定l两个参数-e -s ,create -e -s /path [data]。临时节点只在当前会话生命周期中有效,会话结束节点自动删除。

(3)get命令
基本格式为:get [-s] /path
get命令获取Znode中的数据,如下所示:
在这里插入图片描述同时,如果给定参数-s的话就会查看出Znode全部的信息。
在这里插入图片描述
oldlu:存放的数据
cZxid:创建时 zxid(znode 每次改变时递增的事务 id)
ctime:创建时间戳
mZxid:最近一次更近的 zxid
mtime:最近一次更新的时间戳
pZxid:子节点的 zxid
cversion:子节点更新次数
dataversion:节点数据更新次数
aclVersion:节点 ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为 ephemeral 节点(临时,生命周期与 session 一样),
ephemeralOwner 值表示与该节点绑定的 session id. 如果该节点不是
ephemeral 节点, ephemeralOwner 值为 0.
dataLength:节点数据字节数
numChildren:子节点数量

(4)set命令
基本格式为:set /path [data]
功能为添加或修改 Znode 中的值。
在这里插入图片描述
(5)delete命令
基本格式为:delete /path
功能为删除 Znode。
在这里插入图片描述

6、介绍一下Zookeeper的监听机制?

Zookeeper的监听机制使用的是观察者模式来进行设计的。当客户端注册监听它关心的目录节点(znode)时,当目录节点(znode)发生变化时(数据变化、被删除、子目录节点增加或者删除)时,Zookeeper会通知客户端。但是watcher通知客户端时,只告诉客户端发生了事件而不会告知其内容,并且无论是客户端还是服务端,一旦一个监听器watcher被触发就会被zookeeper从相应的存储中删除,

7、Zookeeper哪些部署模式?

Zookeeper有三种部署模式:
(1)单机部署:一台集群上运行;
(2)集群部署:多台集群上运行;
(3)伪集群部署:一台集群上启动多个Zookeeper实例运行。

8、Zookeeper中的服务器角色

(1)Leader 领导者
它是事务请求的唯一调度和处理者,保证集群事务处理的顺序性,同时也是集群内部各服务的调度者。

(2)Follower跟随者
主要是处理客户端的非事务请求,转发事务请求给 Leader 服务器,同时参与事务请求 Proposal 的投票,还有参与 Leader 选举投票。

(3)Observer观察者
它是3.0 版本以后引入的一个服务器角色,有在不影响集群事务处理能力的基础上提升集群的非事务处理能力,可以处理客户端的非事务请求,转发事务请求给 Leader 服务器,但是它不参与任何形式的投票

9、zookeeper 怎么保证主从节点的状态同步

zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab 协议。 zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者(Leader)崩溃后,zab 就进入了恢复模式,当领导者(Leader)被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。

10、集群中为什么要有主节点(master)?

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,而其他的机器可以共享这个结果,这样就可以大大减少了重复计算,从而提高性能,因此就需要有主节点。

11、集群中有三台服务器,假如其中一个节点宕机了,这个时候的zookeeper还能继续使用吗?

可以继续使用,Zookeeper本身也是集群,推荐的是配置不少于3台服务器,也就是说Zookeeper自身也要保证当其中一个节点宕机之后其他的节点也能正常的提供服务。Zookeeper的集群机制就是只要超过半数的节点正常,zookeeper就会正常的提供服务,只有当zookeeper节点宕(dang)得太多了,能工作的节点只剩下一半或者是不到一半的时候,集群才会失效。
比如说:3个节点的集群最多只能挂掉一个节点,2个节点的集群就不能挂掉任何一个节点。

12、集群最少要几台机器?集群规则是怎样的?集群中有3台服务器,其中有一个节点宕机,这个时候Zookeeper还可以使用吗?

集群规则为2N+1台,即最少需要3台机器。
可以继续使用,单数服务器只要没超过一半多点服务器宕机就可以继续使用。

13、说一下Zookeeper的应用场景。

zookeeper是一个经典的发布/订阅模式的分布式服务框架,开发人员经常使用它来进行一些分布式数据的发布/订阅(注册中心),一般有以下几个应用场景:
(1)数据发布/订阅;
(2)统一命名服务;
(3)分布式协调/通知;
(4)集群管理;
(5)负载均衡;
(6)分布式锁;
(7)分布式队列

本文全属查阅资料以及平时自己笔记整理所写(不喜勿喷!),如有不正确的地方,请在评论区说明,我会及时进行更正。

现在暂时内容有些少,后面会持续更新…

互相学习,互相进步!

猜你喜欢

转载自blog.csdn.net/weixin_43246215/article/details/107398096