当前位置: 首页 > news >正文

zookeeper面试题

1. 什么是zookeeper

zookeeper是一个开源的 分布式协调服务。他是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。
Zookeeper保证了如下分布式一致性特性:

  1. 顺序一致性
  2. 原子性
  3. 单一视图
  4. 可靠性
  5. 实时性(最终一致性)

2. Zookeeper都有哪些功能

  • 集群管理:监控节点存活状态、运行请求等。
    主节点选举:主节点挂掉了之后,可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举过程,使用zookeeper可以协助完成这个过程。
    分布式锁:Zookeeper提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多个线程同时读同一个资源,如果要使用写锁也只能有一个线程使用。Zookeeper可以对分布式锁进行控制。
    命名服务:在分布式系统中,通过使用命名服务,客户端应用能够指定名字来获取资源或服务地址,提供者等信息。

3. Zookeeper的工作流程

首先客户端连接Zookeeper集群中的任何一个节点,可以是leader节点,也可以是follower节点,一旦连接,节点会给客户端分配会话ID,并向客户端发送确认,如果客户端收到确认,那么连接成功,客户端会规律性的给Zookeeper发送心跳包,确保连接没有断开。

  • 客户端向zookeeper从节点发送读请求,节点会直接从数据库中找到这个节点的数据然后返回。
  • 客户端向zookeeper从节点发送写请求,节点会将znode路径和数据转发到leader节点,leader会将写请求转化为proposal提案,并且分配一个事务ID zxid,将这个proposal放到每个节点的队列中去,然后会根据先进先出的策略,将消息发送给从节点,从节点收到后会将事务写入磁盘中,然后返回ACK响应给主节点,当主节点接收到半数以上的从节点的ACK响应后,主节点会认为这个事务提交成功,完成这个事务提交,同时给所有从节点发送commit消息,从节点收到消息后,将这个事务提交。

3. Zookeeper工作原理

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做ZAB协议。ZAB协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,ZAB就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader状态同步以后,恢复模式就结束了。状态同步,保证了leader和Server具有相同的系统状态。

4.什么是Zookeeper的文件系统

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

5. 集群中为什么要有主节点

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

6. Zookeeper怎么保证主从节点的状态同步

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做ZAB协议。ZAB协议有两种模式,分别是恢复模式(选主模式)和广播模式(同步)。当服务启动或者在领导者崩溃后,ZAB就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

7. 什么是ZAB协议

ZAB协议是为了分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议包括两种基本的模式:崩溃恢复和消息广播
当整个Zookeeper集群刚刚启动或者leader服务器宕机,重启或者网络故障导致不存在过半的服务器和leader服务器保持正常通信时,所有 进程进入崩溃恢复模式。首先选举产生新的leader服务器,然后集群中follower服务器开始和新的leader服务器进行数据同步,当集群中超过半数机器和该leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,leader服务器开始接收客户端的事务请求生成事务提案来进行事务请求处理。

8. ZAB和Paxos算法的联系和区别

相同点:

  1. 两者都存在一个类似于Leader进程的角色,由其负责协调多个follower进程的运行。
  2. Leader进程都会等待超过半数的follower做出正确的反馈后,才会将一个提案进行提交。
  3. ZAB协议中,每个proposal中都包含一个epoch值来代表当前的leader周期,Paxos中名字为Ballot。

不同点:

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

9. 四种类型的数据节点Znode

  1. persistent——持久节点:除非手动删除,否则节点一直存在于zookeeper上。
  2. ephemeral——临时节点:临时节点的生命周期和客户端会话绑定,一旦客户端会话失效,
  3. persistent-sequential——持久顺序节点:基本特性同持久节点,只是增加了顺序属性,节点名后边追加一个由父节点维护的自增整形数字。
  4. ephemeral-sequential——临时顺序节点:基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

10. 什么是Zookeeper的通知机制

client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变。

11. Zookeeper中服务器角色有哪些?

Leader

 1. 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。2. 集群内部各服务的调度者。

Follower

  1. 处理客户端的非事务请求,转发事务请求给Leader服务器。2. 参与事务请求Proposal投票3. 参与Leader选举

Observer

   1.在不影响集群事务处理能力的基础上提升集群的非事务处理能力。2. 处理客户端的非事务请求,转发事务请求给Leader服务器。3. 不参与任何形式的投票。 

12. Zookeeper下Server工作状态

服务器具有四种状态:Looking、Following、Leading、Observing
Looking : 寻找Leader状态,当服务器处于该状态时,他会认为当前集群中,没有Leader。因此,需要进入Leader选举状态。
Following: 跟随者状态,表明当前服务器角色是Follower。
Leading:领导者状态,表明当前服务器角色是Leader。
Observing:观察者状态,表明当前服务器角色是Observer。

13. Zookeeper是如何保证事务的顺序一致性的

Zookeeper采用全局递增的事务ID来标识,所有的proposal都在被提出的时候加上了zxid。当新产生proposal的时候,会依据数据库的两阶段过程,首先向其他server发出事务执行请求,如果半数的机器都能执行并且执行成功,那么就会开始执行。

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

最少要三台,规则为2N+1

15. Zookeeper节点宕机如何处理

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

  • 3个节点的cluster可以挂掉1个节点。
  • 2个节点的cluster不能挂掉任何节点。

16. Eureka和Zookeeper区别

  • 一致性模型与CAP定理取舍
    Eureka: 遵循AP原则,在网络分区发生时,Eureka优先保证服务的可用性,即使返回过时的信息。它通过自我恢复和客户端缓存机制来提高可用性,牺牲了一定程度的数据强一致性。Eureka提供了最终一致性模型,即所有节点上的服务注册信息最终会达到一致状态,但在短时间内可能存在差异。
    Zookeeper:遵循CP原则(一致性与分区容错性)。Zookeeper保证了数据的一致性,即使在部分网络分区的情况下,也确保不会返回错误的数据。这得益于其严格的Leader选举和事务日志复制机制。然而,在某些故障场景下,如Leader选举期间,服务的可用性可能会受到影响。
  • 架构与容错能力
    Eureka:采用客户端-服务器模型,客户端作为服务实例向Eureka服务器注册自己的信息,并定期发送心跳以续约。Eureka服务器之间通过副本数据的同步来实现高可用性和容错性。Eureka通过区域感知和自我保护机制来应对网络分区,即使部分节点故障,也能保持服务的可用性。
    Zookeeper:为主从结构,包含Leader节点和Follower节点。当Leader节点故障时,剩余节点会重新进行选举,选举过程中服务可能不可用。选举完成后,新Leader会与Follower节点进行数据同步,然后恢复服务。Zookeeper通过集群模式提高容错能力,但单个节点故障可能影响整个集群的服务。

相关文章:

zookeeper面试题

1. 什么是zookeeper zookeeper是一个开源的 分布式协调服务。他是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。 Zooke…...

Linux学习笔记13---GPIO 中断实验

中断系统是一个处理器重要的组成部分,中断系统极大的提高了 CPU 的执行效率,本章会将 I.MX6U 的一个 IO 作为输入中断,借此来讲解如何对 I.MX6U 的中断系统进行编程。 GIC 控制器简介 1、GIC 控制器总览 I.MX6U(Cortex-A)的中断控制器…...

[Redis][Hash]详细讲解

目录 0.前言1.常见命令1.HSET2.HGET3.HEXISTS4.HDEL5.HKEYS6.HVALS7.HGETALL8.HMGET9.HLEN10.HSETNX11.HINCRBY12.HINCRBYFLOAT 2.内部编码1.ziplist(压缩链表)2.hashtable(哈希表) 3.使用场景4.缓存方式对比1.原⽣字符串类型2.序列化字符串类型3.哈希类型 0.前言 在Redis中&am…...

上半年亏损扩大/百亿资产重组终止,路畅科技如何“脱困”?

在智能网联汽车市场形势一片大好的前提下,路畅科技上半年的营收却出现了下滑,并且亏损也进一步扩大。 2024年半年度报告显示,路畅科技营业收入1.35亿元,同比下滑7.83%;实现归属上市公司股东的净利润为亏损2491.99万元…...

协议IP规定,576字节和1500字节的区别

576字节和1500字节的区别主要在于它们是IP数据报在数据链路层中的最大传输单元(MTU)的不同限制。‌ ‌576字节‌:这个数值通常与IP层(网络层)的数据报有关,它指的是在不进行分片的情况下,IP数据…...

对抗攻击的详细解析:原理、方法与挑战

对抗攻击的详细解析:原理、方法与挑战 对抗攻击(Adversarial Attack)是现代机器学习模型,尤其是深度学习模型中的一个关键安全问题。其本质在于,通过对输入数据添加精微的扰动,人类难以察觉这些扰动&#…...

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…...

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…...

【艾思科蓝】JavaScript在数据可视化领域的探索与实践

【ACM出版 | EI快检索 | 高录用】2024年智能医疗与可穿戴智能设备国际学术会议(SHWID 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看 学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 JavaScript可视化库概览 D3.js基础入门 1. 引入…...

【标准库的典型内容】std::declval

一、 d e c l v a l declval declval的基本概念和常规范例 s t d : : d e c l v a l std::declval std::declval 是 C 11 C11 C11标准中出现的一个函数模板。这个函数模板设计的比较奇怪(没有实现,只有声明),因此无法被调用&…...

深入了解package.json文件

在前端项目开发中,我们经常会遇到package.json文件。这个文件不仅是一个简单的配置文件,它还承担了项目管理的重任。下面,我们将深入探讨package.json文件的各个字段和作用,并通过实例来帮助你更好地理解和使用它。 package.json…...

【基础知识】网络套接字编程

套接字 IP地址 port(端口号) socket(套接字) socket常见API //创建套接字 int socket(int domain, int type, int protocol); //绑定端口 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //监听套接字…...

小程序地图展示poi帖子点击可跳转

小程序地图展示poi帖子点击可跳转 是类似于小红书地图功能的需求 缺点 一个帖子只能有一个点击事件,不适合太复杂的功能,因为一个markers只有一个回调回调中只有markerId可以使用。 需求介绍 页面有地图入口,点开可打开地图界面地图上展…...

传统到AI 大数据分析的演变,颠覆智慧水电的未来?

传统到AI 大数据分析的演变,颠覆智慧水电的未来? 前言传统到AI 大数据分析的演变 前言 水电作为一种重要的能源形式,一直在我们的生活中扮演着至关重要的角色。而如今,随着科技的飞速发展,智慧水电和 AI 大数据应用的…...

while语句

1.while使用 打印1-10 #include<stdio.h> int main() {int a 1;while (10 > a){printf("%d\n", a);a 1;}return 0; } 2.while语句中的break&#xff0c;continue break&#xff1a; 跳出while语句 #include<stdio.h> int main() {int a 0;wh…...

机器学习(西瓜书)第 10 章 降维与度量学习

10.1 k近邻学习kNN k 近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法,其工作机制非常简单&#xff1a;给定测试样本&#xff0c;基于某种距离度量找出训练集中与其最靠近的k个训练样本&#xff0c;然后基于这k个 “邻居”的信息来进行预测.通常&#xff0c;在…...

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建Halo博客平台 Halo博客平台是一款基于Java的开源博客系统&#xff0c;以其简单易用、功能强大、美观大方等特点而受到广泛欢迎&#xff0c;采用了多种先进的技术框架&#xff0c;包括Freemarker模板引擎、Vue.j…...

Android carrier_list.textpb 和apns-conf.xml 配置文件参考

简介 针对SIM 的APN配置是在apns-conf.xml,而Google源码中有apns-full-conf.xml案例参考,是加入了carrier_id的统一配置,就不用单独的一张张卡配了。 apns-conf.xml和apns-full-conf.xml有什么区别? 在于它们包含的配置内容和复杂性,full包含了carrier_id字段。 详细代…...

二期 1.4 Nacos安装部署 - Window版

本文目录 Nacos支持三种部署模式环境准备下载Nacos启动登录服务注册与查看Nacos支持三种部署模式 单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境,确保高可用。多集群模式 - 用于多数据中心场景。以 Window单机模式 抛转引玉,其它部署方式参考官方文档: https://n…...

vue3基础九问,你会几问

1. Vue是什么&#xff1f; Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的核心库只关注视图层&#xff0c;采用自下而上的增量开发设计&#xff0c;这使得你可以将 Vue 轻松地整合到现有的项目中&#xff0c;或者与其他前端库一起使用。Vue 的目标是通过提供反…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要&#xff0c;因为这将有助于减少信号发射&#xff0c;最大程度地减少噪声&#xff0c;确保器件作用&#xff0c;最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确&#xff0c;然…...

本地部署drawDB结合内网穿透技术实现数据库远程管控方案

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下&#xff0c;数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统&#xff0c;还是初创…...

codeforces C. Cool Partition

目录 题目简述&#xff1a; 思路&#xff1a; 总代码&#xff1a; https://codeforces.com/contest/2117/problem/C 题目简述&#xff1a; 给定一个整数数组&#xff0c;现要求你对数组进行分割&#xff0c;但需满足条件&#xff1a;前一个子数组中的值必须在后一个子数组中…...

数据库(sqlite)基本操作

数据库&#xff08;sqlite&#xff09; 一&#xff1a;简介&#xff1a; 为什么需要单独的数据库来进行管理数据&#xff1f; 数据的各种查询功能数据的备份和恢复花大量时间在文件数据的结构设计和维护上要考虑多线程对数据的操作会涉及到同步问题&#xff0c;会增加很多额…...