【ZooKeeper面试题】从基础到深入
ZooKeeper面试题:从基础到深入
基础概念
什么是ZooKeeper?它的主要用途是什么?
- ZooKeeper是一个分布式的、开源的协调服务,用于分布式应用程序
- 主要用途:配置管理、命名服务、分布式同步、集群管理等
ZooKeeper的数据模型是怎样的?
- 采用类似文件系统的层次化命名空间(树形结构)
- 每个节点称为znode,可以存储数据和子节点
- 分为持久节点和临时节点
ZooKeeper中的节点(znode)有哪些类型?
- 持久节点(PERSISTENT):创建后一直存在,直到显式删除
- 临时节点(EPHEMERAL):客户端会话结束时自动删除
- 持久顺序节点(PERSISTENT_SEQUENTIAL):持久节点+顺序编号
- 临时顺序节点(EPHEMERAL_SEQUENTIAL):临时节点+顺序编号
ZooKeeper的Watch机制是什么?
- 客户端可以在znode上设置watch来监听节点变化
- 当znode发生变化时,ZooKeeper会通知客户端
- Watch是一次性的,触发后需要重新设置
架构与原理
ZooKeeper集群中的角色有哪些?
- Leader:负责处理所有写请求和事务性操作
- Follower:处理读请求,参与Leader选举和提案投票
- Observer:与Follower类似,但不参与投票,用于扩展读性能
ZooKeeper如何保证数据一致性?
- 使用ZAB协议(ZooKeeper Atomic Broadcast)
- 所有写请求都通过Leader处理,并广播给所有Follower
- 只有多数节点确认后,写操作才会提交
ZAB协议的工作原理是什么?
- 分为两个阶段:
- 发现阶段:选举Leader并同步数据
- 广播阶段:Leader将更新广播给Follower
- 使用两阶段提交确保数据一致性
- 分为两个阶段:
ZooKeeper的选举过程是怎样的?
- 每个节点都有唯一的myid和zxid(最后事务ID)
- 节点投票给zxid最大的节点,zxid相同则投给myid大的
- 获得多数票的节点成为Leader
高级特性
ZooKeeper如何处理脑裂问题?
- 通过"多数派"原则解决
- 只有获得多数节点认可的Leader才能提供服务
- 少数派分区中的节点无法选举出有效Leader
ZooKeeper的会话(Session)机制是怎样的?
- 客户端与服务器建立TCP连接时创建会话
- 会话有超时时间(sessionTimeout)
- 心跳机制保持会话活跃
- 会话过期时,临时节点会被删除
ZooKeeper的ACL权限控制是如何工作的?
- 每个znode可以设置访问控制列表(ACL)
- ACL由(scheme:expression, permissions)组成
- 常用scheme:world, auth, digest, ip等
- 权限:CREATE, READ, WRITE, DELETE, ADMIN
ZooKeeper的读写性能特点是什么?
- 读性能高:所有服务器都可处理读请求
- 写性能较低:所有写请求必须通过Leader处理
- 适合读多写少的场景
实际应用
如何使用ZooKeeper实现分布式锁?
- 创建临时顺序节点
- 检查自己是否是最小序号的节点
- 如果是则获取锁,否则监听前一个节点
- 释放锁时删除自己的节点
ZooKeeper如何实现配置管理?
- 将配置信息存储在持久znode中
- 客户端watch该znode的变化
- 配置更新时,所有客户端会收到通知并获取新配置
ZooKeeper如何实现服务注册与发现?
- 服务提供者创建临时znode(如/services/service1/node1)
- 服务消费者watch父znode(/services/service1)的子节点变化
- 当服务提供者上线/下线时,消费者会收到通知
ZooKeeper如何实现Leader选举?
- 所有候选节点创建临时顺序znode
- 序号最小的节点成为Leader
- 其他节点watch比它小的节点
- 当Leader失效时,下一个序号的节点成为新Leader
性能优化与运维
如何优化ZooKeeper的性能?
- 合理设置sessionTimeout
- 使用Observer节点扩展读能力
- 避免过多watch和频繁的小数据量写入
- 适当增加snapshot和log清理频率
ZooKeeper的监控指标有哪些关键点?
- 节点数量和数据大小
- 请求延迟和吞吐量
- Watch数量
- 连接数和会话数
- 领导者状态和选举次数
如何诊断ZooKeeper的性能问题?
- 检查四字命令如stat, mntr
- 分析日志中的WARN和ERROR
- 监控网络延迟和磁盘I/O
- 检查是否有过多的watch或大znode
ZooKeeper的备份和恢复策略是什么?
- 定期备份事务日志和快照文件
- 可以通过恢复快照+重放事务日志来恢复
- 重要数据建议多重备份机制
与其他技术对比
ZooKeeper与etcd有何异同?
- 相同点:都是分布式一致性协调服务
- 不同点:
- etcd使用Raft协议,ZooKeeper使用ZAB
- etcd提供HTTP/gRPC接口,ZooKeeper有自己的客户端API
- etcd更简单轻量,ZooKeeper功能更丰富
为什么Kafka早期版本依赖ZooKeeper,新版本要移除?
- 早期用于broker注册、topic配置、ISR管理等
- 依赖ZooKeeper增加了复杂度
- 新版本使用Kafka内部共识协议(KRaft)替代
ZooKeeper适合哪些场景,不适合哪些场景?
- 适合场景:配置管理、服务发现、分布式锁、Leader选举
- 不适合场景:大数据量存储、高频写操作、需要强一致性读
【ZooKeeper面试题】从基础到深入的更多相关文章
- ZooKeeper 面试题
高强度训练第二十一天总结 1. ZooKeeper 面试题 ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群 中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终 ...
- 2019年面试官最喜欢问的28道ZooKeeper面试题
前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper 的 ...
- 2020年最新ZooKeeper面试题(附答案)
2020年最新ZooKeeper面试题 1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zooke ...
- Zookeeper 面试题(持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Java面试题之基础篇概览
Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...
- 最新整理的spring面试题从基础到高级,干货满满
最新整理的spring面试题从基础到高级,干货满满 前言: 收藏了一些关于Spring的面试题,一方面是为了准备找工作的时候看面试题,另一方面,通过面试题的方式加深一些自己的理论知识. spring ...
- [Linux]经典面试题 - 网络基础 - TCP三次握手
[Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...
- Python自动化测试面试题-Python基础篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- 29道Zookeeper面试题超详细(附答案)
原文链接 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件 ...
- C/C++笔试题(基础题)
为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...
随机推荐
- MySQL 8.0 误删了root用户怎么办
MySQL 8.0 误删了root用户怎么办 修改配置文件 修改配置文件,让其可以无账号登录 默认的文件为: /etc/my.cnf 添加:skip-grant-tables 重启服务 service ...
- Ribbon-Loadbalancer自定义负载均衡策略:本地优先+偏向服务器优先
Ribbon 核心顶层抽象 package com.netflix.loadbalancer; public interface IRule { Server choose(Object var1); ...
- K8S基本概念和组件
特点 便携性 无论公有云.私有云.混合云还是多云架构都全面支持 可扩展 模块化.可插拔.可挂载.可组合,支持各种形式的扩展 自修复 自保持应用状态.自重启.自复制.自缩放,声明式语法 组件 etcd ...
- 04 详解”死亡ReLU“问题
本篇文章尝试通过具体的神经网络例子,来深入探讨"死亡ReLU"的问题. 很多资料都会提到神经元"永久性死亡"这种说法,我认为这会对我们的理解产生一定的误解.事实 ...
- 在 CentOS 系统下搭建 ZeroTier Moon
在 CentOS 系统下搭建 ZeroTier Moon 服务器时,生成的配置文件位置是在 /var/lib/zerotier-one/ 目录下.该目录包含了 ZeroTier One 的运行时数据, ...
- 《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统
<机器人SLAM导航核心技术与实战>第1季:第9章_视觉SLAM系统 视频讲解 [第1季]9.第9章_视觉SLAM系统-视频讲解 [第1季]9.1.第9章_视觉SLAM系统_ORB-SLA ...
- 2012R2双网卡路由的设定
目前T440服务器, os只能起步2012R2.intelWin联盟是实实在在的.在该os上,DB支持SQL2008. 你要安装SQL2005也可以.到网上查找攻略.那也是死去活来.还好.2008兼容 ...
- 2012R2免登录操作
由于许多程序系统,需要等服务器系统起来登录后才让运行.对于远程等一些操带来不方便.查资料: 如何在WINDOWSSERVER2012R2的登陆界面,启动特定的第三方软件? 服务器平台 Operatin ...
- creative打靶学习笔记(4)
参考视频[Tryhackme系列网安课程-Creative-难度3-哔哩哔哩] https://b23.tv/6qzkzyh nmap扫描![](https://cdn.nlark.com/yuque ...
- Junit单元测试的maven设置
maven 官方文档: https://maven.apache.org/surefire/maven-surefire-plugin/usage.html maven是通过插件 maven-sure ...