恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
ZooKeeper面经总结
首页
资讯中心
/
ZooKeeper面经总结
ZooKeeper面经总结
发布时间:2026/10/14 3:27:56
Zookeeper集群有哪些角色有三种角色Leader、Follower、ObserverLeader是核心它是事务请求的唯一调度和处理者所有写请求最终都由它处理并保证整个集群事务处理的顺序性。Follower会做四件事处理客户端的非事务请求把事务请求转发给Leader参与事务Proposal的投票参与Leader选举投票。Observer只提供非事务的查询服务既不参与Proposal投票也不参与Leader选举投票。ZNode特点Zookeeper 文件系统 监听通知机制ZNode就是ZooKeeper的数据节点特点有四条他是一个树形结构路径唯一整棵树以/为根每个节点都用绝对路径唯一标识一个字符串直接定位而且ZooKeeper没有相对路径的概念所有路径都必须以/开头。它既是文件也是目录。每个节点既能存自己的数据又能有子节点。数据很小因为它存的是状态信息、配置、位置信息这类协调数据通常就是KB级而且单个节点的数据量不能超过1M数据是原子读写的。读就是把这个节点的所有字节读出来写就是取代所有数据不存在只改其中某一部分的操作。另外每个节点还带两样附加信息一份ACL控制谁能做什么一个stat 结构里面有数据版本、子节点版本、权限版本每次变更对应的版本号递增可以用来做缓存验证和协调更新。然后就是节点一般有两种类型、每种两种状态。一个持久节点一个短暂节点每种又有普通和顺序编号两种形态。持久节点是客户端和服务端断开连接后节点依然存在短暂节点是生命周期绑定会话会话一结束节点就自动删除ZooKeeper的监听通知机制该机制的核心就是Watch。客户端可以在一个ZNode上设置Watch当这个ZNode发生变化时ZK会把通知异步推给客户端。事件类型有四种NodeCreated、NodeDeleted、NodeDataChanged、NodeChildrenChanged。客户端注册监听它关心的目录节点当节点被创建、被删除、数据改变、增加子节点或者子节点被删除的时候ZooKeeper就会异步通知它。这里有个关键特性Watch触发一次就会被删除想继续监听就得在回调里重新注册但是ZooKeeper3.6加了一个新特性可以设置永久的、递归的监视。默认模式是PERSISTENT_RECURSIVE。CAP原则以及如何选择CAP是三个特性一致性更新成功后所有用户都应该读到最新值等同于所有节点访问同一份最新数据副本可用性每一个操作总能在一定时间内返回结果结果可以是成功也可以是失败而且不保证是最新数据分区容错性遇到任何网络分区故障时仍然能对外提供服务。网络故障避免不了所以分区容错是必选的然后看场景选择AP还是CPCP的典型场景就是银行转账因为涉及钱一致性一点都不能让步反过来电商抢购是典型的AP为了保证系统一直能用会在一致性上做出牺牲。ZooKeeper的选主过程第一步触发选主一是集群启动的时候二是运行期Leader出现网络中断、崩溃、重启或者集群里半数的服务器跟Leader通信不上了。这时候集群会进入崩溃恢复模式触发选主。第二步投票每个节点先投自己一票票上带着自己的事务编号ZXID和服务器编号myid广播给所有人收到别人的票就比一比谁的ZXID大就改投谁ZXID一样就比myid谁大投谁。第三步定主谁拿到超过半数的票谁就是Leader状态变成Leading剩下的变成Foller状态变成Following。第四步同步。新Leader上台第一件事是把纪元加一然后带着这个新纪元让所有Follower跟他对齐数据。第五步复活这一步必须等过半的机器都同步完ZAB才退出崩溃恢复模式、进入原子广播模式集群重新开始接收客户端请求到这又回到了一主多从的正常状态整个闭环完成。ZooKeeper 如何帮助其他组件选主经典做法是临时顺序节点加监听所有候选服务在同一个持久的父节点下面各自创建一个临时顺序节点ZK会自动编号成000000001、000000002这样。编号最小的那个就是 Leader。关键在监听方式每个节点只监听比自己小的那个前驱节点形成一条链接力上任Leader一旦挂掉它的临时节点随会话自动消失前驱节点的监听立刻通知下一个节点实现自动接任Leader。