互联网Java工程师面试题·Zookeeper 篇·第二弹

目录

13. 服务器角色

14. Zookeeper 下 Server 工作状态

15. 数据同步

16. zookeeper 是如何保证事务的顺序一致性的?

17. 分布式集群中为什么会有 Master?

18. zk 节点宕机如何处理?

19. zookeeper 负载均衡和 nginx 负载均衡区别

20. Zookeeper 有哪几种几种部署模式?

21. 集群最少要几台机器,集群规则是怎样的?

22. 集群支持动态添加机器吗?

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

24. Zookeeper 的 java 客户端都有哪些?

25. chubby 是什么,和 zookeeper 比你怎么看?

26. 说几个 zookeeper 常用的命令。

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

28. Zookeeper 的典型应用场景


13. 服务器角色

Leader
1 、事务请求的唯一调度和处理者,保证集群事务处理的顺序性
2 、集群内部各服务的调度者
Follower
1 、处理客户端的非事务请求,转发事务请求给 Leader 服务器
2 、参与事务请求 Proposal 的投票
3 、参与 Leader 选举投票
Observer
1 3.0 版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提
升集群的非事务处理能力
2 、处理客户端的非事务请求,转发事务请求给 Leader 服务器
3 、不参与任何形式的投票

14. Zookeeper Server 工作状态

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

15. 数据同步

整个集群完成 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 中最小 ZXID
maxCommittedLog
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

16. zookeeper 是如何保证事务的顺序一致性的?

        zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal (提议)都在被提出的时候加上了 zxid zxid 实际上是一个 64 位的数字,高 32 位是 epoch (时期; 纪元 ; ; 新时代)用来标识 leader 周期,如果有新的 leader 产生出来, epoch会自增,低 32 位用来递增计数。当新产生 proposal 的时候,会依据数据库的两阶段过程,首先会向其他的 server 发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。

17. 分布式集群中为什么会有 Master

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

18. zk 节点宕机如何处理?

Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。 Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。
如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数据是有多个副本的,数据并不会丢失;
如果是一个 Leader 宕机, Zookeeper 会选举出新的 Leader
ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。
所以
3 个节点的 cluster 可以挂掉 1 个节点 (leader 可以得到 2 >1.5)
2 个节点的 cluster 就不能挂掉任何 1 个节点了 (leader 可以得到 1 <=1)

19. zookeeper 负载均衡和 nginx 负载均衡区别

        zk 的负载均衡是可以调控, nginx 只是能调权重,其他需要可控的都需要自己写
插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式。

20. Zookeeper 有哪几种几种部署模式?

部署模式:单机模式、伪集群模式、集群模式。

21. 集群最少要几台机器,集群规则是怎样的?

集群规则为 2N+1 台, N>0 ,即 3 台。

22. 集群支持动态添加机器吗?

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

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

不是。官方声明:一个 Watch 事件是一个一次性的触发器,当被设置了 Watch 的数据发生了改变的时候,则服务器将这个改变发送给设置了 Watch 的客户端,以便通知它们。
为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。
一般是客户端执行 getData(“/ 节点 A”,true) ,如果节点 A 发生了变更或删除,客户端会得到它的 watch 事件,但是在之后节点 A 又发生了变更,而客户端又没有设置 watch 事件,就不再给客户端发送。
在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

24. Zookeeper 的 java 客户端都有哪些?

java 客户端: zk 自带的 zkclient Apache 开源的 Curator

25. chubby 是什么,和 zookeeper 比你怎么看?

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

26. 说几个 zookeeper 常用的命令。

常用命令: ls get set create delete 等。

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

相同点:
1 、两者都存在一个类似于 Leader 进程的角色,由其负责协调多个 Follower 进程的运行
2 Leader 进程都会等待超过半数的 Follower 做出正确的反馈后,才会将一个提案进行提交
3 ZAB 协议中,每个 Proposal 中都包含一个 epoch 值来代表当前的 Leader周期,Paxos 中名字为 Ballot
不同点:
ZAB 用来构建高可用的分布式数据主备系统( Zookeeper ), Paxos 是用来构建
分布式一致性状态机系统。

28. Zookeeper 的典型应用场景

        Zookeeper 是一个典型的发布 / 订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。
        通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:
1 、数据发布 / 订阅
2 、负载均衡
3 、命名服务
4 、分布式协调 / 通知
5 、集群管理
6 Master 选举
7 、分布式锁
8 、分布式队列

要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么才能实现一个链接自动识别安卓.apk苹果.ipa手机和win电脑wac电脑

您想要实现的功能是通过检测用户代理&#xff08;User Agent&#xff09;来识别访问设备类型并根据设备类型展示相应的页面。您可以根据以下步骤进行实现&#xff1a; 选择后端语言和框架&#xff0c;例如&#xff1a;Node.js、Express。 创建一个新的Express项目。 编写一个…

开发过程教学——交友小程序

交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意&#xff1a;由于小程序分包限制2M以内&#xff0c;所以要注意图片和视频的处理。 1. 我的基本信息 数据库表&#xff1a; 我的基本信息我的登录退出记录我的登录状态&#x…

kubectl命令举例

为了使读者能够快速掌握kubectl命令的使用方法&#xff0c;下面对常用的命令进行介绍。 1. kubectl create命令 此命令通过文件或者标准输入创建一个资源对象&#xff0c;支持YAML或者JSON格式的配置文件。例如&#xff0c;如果用户创建了一个Nginx的YAML配置文件&#xff0c…

安装JDK(Java SE Development Kit)超详细教程

文章时间 &#xff1a; 2023-10-04 1. 下载地址 直接去下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ &#xff08;需要翻墙&#xff0c;不想翻墙或者不想注册oracel账号的&#xff0c;直接去我的阿里云盘&#xff09; 阿里云盘&#xff1a;http…

ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合

目录 一、数据聚合 1.1、基本概念 1.1.1、聚合分类 1.1.2、特点 1.2、DSL 实现 Bucket 聚合 1.2.1、Bucket 聚合基础语法 1.2.2、Bucket 聚合结果排序 1.2.3、Bucket 聚合限定范围 1.3、DSL 实现 Metrics 聚合 1.4、基于 JavaRestClient 实现聚合 1.4.1、组装请求 …

使用CrawlSpider爬取全站数据。

CrawpSpider和Spider的区别 CrawlSpider使用基于规则的方式来定义如何跟踪链接和提取数据。它支持定义规则来自动跟踪链接&#xff0c;并可以根据链接的特征来确定如何爬取和提取数据。CrawlSpider可以对多个页面进行同样的操作&#xff0c;所以可以爬取全站的数据。CrawlSpid…

AtCoder Beginner Contest 233 (A-Ex)

A.根据题意模拟即可 B.根据题意模拟即可 C.直接用map 进行dp即可 D.用前缀和进行模拟&#xff0c;用map统计前缀和&#xff0c;每次计算当前前缀和-k的个数就是以当前点为右端点答案。 E - Σ[k0..10^100]floor(X&#xff0f;10^k) (atcoder.jp) &#xff08;1&#xff09;…

代码随想录算法训练营第五十六天 | 动态规划 part 14 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和(dp)

目录 1143.最长公共子序列思路代码 1035.不相交的线思路代码 53. 最大子序和&#xff08;dp&#xff09;思路代码 1143.最长公共子序列 Leetcode 思路 本题和718. 最长重复子数组 区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;“ace” …

第82步 时间序列建模实战:LightGBM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍LightGBM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程&#xff1f; 可以让设备中的程序&#xff0c;与网络上其他设备中的程序进行数据交互&#xff0c;从而实现网络通信的手段&#xff0c;java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构…

【数据结构---排序】很详细的哦

本篇文章介绍数据结构中的几种排序哦~ 文章目录 前言一、排序是什么&#xff1f;二、排序的分类 1.直接插入排序2.希尔排序3.选择排序4.冒泡排序5.快速排序6.归并排序总结 前言 排序在我们的生活当中无处不在&#xff0c;当然&#xff0c;它在计算机程序当中也是一种很重要的操…

QT中计算日期差,并进行加减

1、界面上拖动两个QDateTimeEdit控件&#xff0c;同时设置为开始时间与结束时间&#xff0c;然后再来拖动个pushButton&#xff0c;命名为查询功能&#xff0c;然后槽函数中&#xff0c;实现如下&#xff1a; void Database::on_pushButton_4_clicked() {QDateTime time1 u…