当前位置:   article > 正文

Zookeeper面试题集锦

Zookeeper面试题集锦

目录

一、什么是Zookeeper?

二、Zookeeper保证的是哪些特性? 

三、Zookeeper的读写原理? 

四、怎么解释Zookeeper的有序性?

五、Zookeeper提供了什么? 

六、 Zookeeper的文件系统是什么? 

七、ZAB协议是什么? 

八、 Zookeeper包含哪几种类型的数据节点? 

九、 Zookeeper的server工作状态有哪些?

十一、Zookeeper宕机了如何处理?

十二、 集群最少需要多少台机器,集群规则是怎么样的?

十三、集群支持动态添加机器嘛? 

十四、 Zookeeper常用的命令有哪些?

十五、 Zookeeper对节点的watch监听是永久的嘛? 为什么不是永久的?

十六、chubby 是什么,和 zookeeper 比你怎么看?

十七、zookeeper是如何保持数据的一致性?

十八、如果master挂了,Zookeeper会怎么办?


一、什么是Zookeeper?

     答:

      Zookeeper是一个开放源码的分布式协调服务。它是集群的管理者并监视着各节点的状态以及根据节点的反馈进行下一步操作。

最终将简单和性能高效、功能稳定的系统提供给用户。

     分布式应用可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁、分布式队列等功能。 

二、Zookeeper保证的是哪些特性? 

     答: 

  1. 顺序一致性。
  2. 原子性。
  3. 单一视图。
  4. 可靠性。
  5. 数据的最终一致性。

三、Zookeeper的读写原理? 

    答:

     客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由Zookeeper来处理的。 对于写请求,这些请求会转发给其他Zookeeper机器并且达成一致后,请求才会返回成功。因此,随着zookeeper的集群机器增多,读的吞吐量会增大,但写的请求吞吐会下降。

四、怎么解释Zookeeper的有序性?

    答: 

      有序性是Zookeeper中非常重要的一个特性,所有的更新都是有序的。并且每一个更新都会有一个时间戳,这个时间戳称为Zxid,全名为Zookeeper Transaction id ,而读请求只会相对于个更新有序,也就是读请求的返回结果为最新的zxid。

五、Zookeeper提供了什么? 

    答:

     文件系统。 

     通知机制。

六、 Zookeeper的文件系统是什么? 

      答:

       Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不 同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放 数据而目录节点不行。 Zookeeper 为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为 1M

七、ZAB协议是什么? 

     答: 

  1.  ZAB协议是专门为分布式协调服务Zookeeper设计的一个支持崩溃恢复的原子广播协议。 
  2.  ZAB协议包括两种基本模式: 崩溃恢复消息广播
  3.   当整个Zookeeper集群刚刚启动或者宕机重启或者网络故障导致存在过半的Zookeeper服务器不能够使用时,所有的进程进入崩溃恢复模式重新选举一个新的leader,leader选举完毕以后,如果存在过半的机器能够与leader进行数据同步,那么进入消息广播模式,leader开始接受客户端的事务请求并进行处理。
  4. 广播模式需要保证proposal被按顺序处理,因此zk采 用了递增的事务id号(zxid)来保证。所有的提议 (proposal)都在被提出的时候加上了zxid。实现中 zxid是一个64为的数字,它高32位是epoch用来标识 leader关系是否改变,每次一个leader被选出来,它 都会有一个新的epoch。低32位是个递增计数。

八、 Zookeeper包含哪几种类型的数据节点? 

      答:

          1、PERSISTENT-持久节点 除非手动删除,否则节点一直存在于 Zookeeper 上

          2、 EPHEMERAL -临时节点 临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与
    zookeeper 连接断开不一定会话失效),那么这个客户端创建的所有临时节点都 会被移除。
          3、 PERSISTENT_SEQUENTIAL -持久顺序节点 基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维 护的自增整型数字
          4、 EPHEMERAL_SEQUENTIAL -临时顺序节点 基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的 自增整型数字。
  1. <dependency>
  2. <groupId>org.apache.zookeeper</groupId>
  3. <artifactId>zookeeper</artifactId>
  4. <version>3.4.13</version>
  5. </dependency>

九、 Zookeeper的server工作状态有哪些?

    答:   

      有4种状态。 looking,following,leading,observing。    

     1、 LOOKING :寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有Leader,因此需要进入Leader选举状态。
     2、 FOLLOWING :跟随者状态。表明当前服务器角色是Follower。
     3、 LEADING :领导者状态。表明当前服务器角色是Leader。
     4、 OBSERVING :观察者状态。表明当前服务器角色是Observer。
十、分布式集群中为什么要有Master?


答:
       在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行。其他机器可以共享这个计算结果,这样就大大减少了重复计算,提高性能。于是就需要进行leader选举,leader的作用为了给folower完成数据同步。

十一、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)。


十二、 集群最少需要多少台机器,集群规则是怎么样的?


      答: 

           2N+1台,N>0,即最少为3台。

十三、集群支持动态添加机器嘛? 


    答: 

         支持,主要包含2种方式,如下:

        全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。
        逐个重启:在过半存活即可用的原则下,一台机器重启不影响整个集群对外提供服务。这是比较常用的方式。3.5版本开始支持动态扩容。

十四、 Zookeeper常用的命令有哪些?

   答: 
       ls get set create delete等。

十五、 Zookeeper对节点的watch监听是永久的嘛? 为什么不是永久的?

    答:

       不是永久监听的。 如果每个客户端对服务器的信息变动是永久监听的,那么当有很多客户端的时候,服务器的数据发生频繁更新时,所有的客户端将会收到通知。那么服务器和网络的压力也因此会变大。

        如果客户端没有设置watch事件,那么服务器的数据发生更新时,不会通知该客户端。

        在实际的应用中,客户端不需要了解服务器的内部的数据变更,只需要得到最新的数据即可。

十六、chubby 是什么,和 zookeeper 比你怎么看?

      答:
         chubby 是 google 的,完全实现 paxos 算法,不开源。zookeeper 是 chubby 的开源实现,使用 zab 协议,paxos 算法的变种。

十七、zookeeper是如何保持数据的一致性?

        这个原则就是:在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。
十八、Paxos算法解决的什么问题呢?

         解决的就是保证每个节点执行相同的操作序列,master维护一个全局写队列,所有写操作都必须放入这个队列编号,那么无论我们写多少个节点,只要写操作是按编号来的,就能保证一致性。

十八、如果master挂了,Zookeeper会怎么办?


        Paxos算法通过投票来对写操作进行全局编号,同一时刻,只有一个写操作被批准,同时并发的写操作要去争取选票,只有获得过半数选票的写操作才会被批准(所以永远只会有一个写操作得到批准),其他的写操作竞争失败只好再发起一轮投票,就这样,在日复一日年复一年的投票中,所有写操作都被严格编号排序。编号严格递增,当一个节点接受了一个编号为100的写操作,之后又接受到编号为99的写操作(因为网络延迟等很多不可预见原因),它马上能意识到自己数据不一致了,自动停止对外服务并重启同步过程。任何一个节点挂掉都不会影响整个集群的数据一致性(总2n+1台,除非挂掉大于n台)。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号