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

2022-04-12 14:20:59 浏览数 (1)

问题导读

一、说说Zookeeper 对节点的 watch 监听通知是永久的吗?为什么?

二、Zookeeper 的 java 客户端都有哪些?

三、ZAB 和 Paxos 算法的联系与区别?

01

说说Zookeeper 对节点的 watch 监听通知是永久的吗?为什么?

正经回答:

不是。

官方声明:一个 Watch 事件是一个一次性的触发器,当被设置了 Watch 的数据发生了改变的时候,则服务器将这个改变发送给设置了 Watch 的客户 端,以便通知它们。

为什么不是永久的?

举个例子,如果服务端变动频繁,而监听的客户端很多情 况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。

一般是客户端执行getData(“/节点 A”,true),如果节点 A 发生了变更或删 除,客户端会得到它的 watch 事件,但是在之后节点 A 又发生了变更,而客户端又没有设置 watch 事件,就不再给客户端发送。

在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动, 我只要最新的数据即可。

分享朋友圈,记录成长每一天~

02

Zookeeper 的 java 客户端都有哪些?

正经回答:

zk 自带的 zkclient 及 Apache 开源的 Curator。

03

ZAB 和 Paxos 算法的联系与区别?

正经回答:

相同点:

(1)两者都存在一个类似于 Leader 进程的角色,由其负责协调多个Follower 进程的运行

(2)Leader 进程都会等待超过半数的 Follower 做出正确的反馈后,才会将 一个提案进行提交

(3)ZAB 协议中,每个 Proposal 中都包含一个 epoch 值来代表当前的Leader 周期,Paxos 中名字为 Ballot

不同点:

ZAB 用来构建高可用的分布式数据主备系统(Zookeeper),Paxos 是用来构建 分布式一致性状态机系统。

- End -

0 人点赞