zookeeper核心面试整理(继续更新)

Posted 醉酒的小男人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper核心面试整理(继续更新)相关的知识,希望对你有一定的参考价值。

什么是zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,有临时节点、临时有序节点、持久节点、持久有序节点,常见命令有ls/get/set/create/delete,提供了文件系统,通知机制,节点状态有:LOOKING、Observer、Leading、Following

ZAB协议

zab协议是zookeeper专门设计的支持崩溃恢复的原子广播协议。目的是实现分布式zoopkeeper各个节点数据一致性。 

ZAB原子广播

 1.根据ZAB协议,所有的写操作都必须通过Leader完成,Leader写入本地日志后再复制到所有的Follower节点
写操作:
a.客户端向Leader发起写请求
b.Leader将写请求以Proposal的形式发给所有的Follow并等待ACK
c.Follow收到Leader的Proposal后返回ACK
d.Leader得到过半数的ACK(Leader对自己默认有一个ACK)后向所有的Follower和Observer发送Commmit
e.Leader将处理结果返回给客户端
为了实现这一点,Zab协议要保证同一个Leader发起的事务要按顺序被执行,同时还要保证只有先前Leader的事务被执行之
后,新选举出来的Leader才能再次发起事务

选举新leader的算法

那我举个例子来说明吧,假如当前有zk1,zk2,zk3,三个节点组成一个集群,现在zk3节点挂了
1.首先zk1和zk2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用 (myid, ZXID)来表示,假设此时ZK1的投票为(1, 1),ZK2的投票为(2, 1),然后各自将这个投票发给集群中其他机器。
2.各服务器接收到投票之后会进行进行检查,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
3.开始处理投票,服务器都需要将别人的投票和自己的myid和zxid进行比较,规则是优先检查ZXID。ZXID比较大的服务器优先作为Leader。 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器,在例子很明显zk2, 会成为新的leader。 

选举leader怎么保证数据不会丢失

我们都知道,zk是cp的,不一定保证可用性,在选举的过程中,不能对外提供服务。但在选举的过程中,首先选zxid(zk的事务ID)最大的为leader,zxid最大,表示数据是最新的,然后广播给folower,这样避免数据丢失 

以上是关于zookeeper核心面试整理(继续更新)的主要内容,如果未能解决你的问题,请参考以下文章

大厂Java核心面试知识点整理,二十九个专题任你挑,美滋滋~

大厂Java核心面试知识点整理,二十九个专题任你挑,美滋滋~

zookeeper面试整理

zookeeper面试整理

zookeeper面试整理

Java相关面试题整理(持续更新)