Java高频面试题- 每日三连问?【Day29】 — ZooKeeper篇(五)

2022-04-12 14:19:24 浏览数 (1)

问题导读

一、说说 Zookeeper 的服务器角色?

二、Zookeeper 下 Server 工作状态?

三、Zookeeper 的数据同步 是怎样的?

01

说说 Zookeeper 的服务器角色?

正经回答:

Leader

(1)事务请求的唯一调度和处理者,保证集群事务处理的顺序性

(2)集群内部各服务的调度者

Follower

(1)处理客户端的非事务请求,转发事务请求给 Leader 服务器

(2)参与事务请求 Proposal 的投票

(3)参与 Leader 选举投票

Observer

(1)3.0 版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础 上提升集群的非事务处理能力

(2)处理客户端的非事务请求,转发事务请求给 Leader 服务器

(3)不参与任何形式的投票

朋友圈分享一下

02

Zookeeper 下 Server 工作状态?

正经回答:

服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING

(1)LOOKING:寻 找 Leader 状态。当服务器处于该状态时,它会认为当前集 群中没有 Leader,因此需要进入 Leader 选举状态。

(2)FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。

(3)LEADING:领导者状态。表明当前服务器角色是 Leader。

(4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。

03

Zookeeper 的 数据同步 是怎样的?

正经回答:

整个集群完成 Leader 选举之后,Learner(Follower 和 Observer 的统称) 回向 Leader

服务器进行注册。

当 Learner 服务器想 Leader 服务器完成注册 后,进入数据同步环节。

数据同步流程:

(均以消息传递的方式进行)

Learner 向 Learder 注册

数据同步

同步确认

Zookeeper 的数据同步通常分为四类:

(1)直接差异化同步(DIFF 同步)

(2)先回滚再差异化同步(TRUNC DIFF 同步)

(3)仅回滚同步(TRUNC 同步)

(4)全量同步(SNAP 同步)

在进行数据同步前,Leader 服务器会完成数据同步初始化:

peerLastZxid:

· 从 learner 服务器注册时发送的 ACKEPOCH 消息中提取 lastZxid(该 Learner 服务器最后处理的 ZXID)

minCommittedLog:

· Leader 服务器 Proposal 缓存队列 committedLog 中最小

ZXIDmaxCommittedLog:

· Leader 服务器 Proposal 缓存队列 committedLog 中最大 ZXID

直接差异化同步(DIFF同步)

· 场景:peerLastZxid 介于 minCommittedLog 和 maxCommittedLog 之间

先回滚再差异化同步(TRUNC DIFF 同步)

· 场景:当新的 Leader 服务器发现某个 Learner 服务器包含了一条自己没 有的事务记录,那么就需要让该 Learner 服务器进行事务回滚--回滚到 Leader 服务器上存在的,同时也是最接近于 peerLastZxid 的 ZXID

仅回滚同步(TRUNC 同步)

· 场景:peerLastZxid 大于 maxCommittedLog

全量同步(SNAP 同步)

· 场景一:peerLastZxid 小于 minCommittedLog

· 场景二:Leader 服务器上没有 Proposal 缓存队列且 peerLastZxid 不等 于lastProcessZxid

- End -

0 人点赞