Zookeeper内部原理

本文介绍了Zookeeper的选举机制,强调了奇数台服务器的重要性,详细阐述了节点如何通过投票选举Leader。同时,讲解了Zookeeper的四种节点类型,包括持久型和短暂型,并说明了序号的增涨规则。此外,还解析了监听器原理,指出客户端与Zookeeper断开连接后节点的生存状态。最后,概述了Zookeeper的写数据流程,涉及 Leader 的角色和半数同意原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 选举机制(面试重点)

  • 半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器
  • 虽然在配置文件中并没有指定MasterSlave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为FollowerLeader是通过内部的选举机制临时产生的

 

  1. Server1先投票,投给自己,自己为1票,没有超过半数,根本无法成为leader,顺水推舟将票数 投给了id比自己大的Server2
  2. Server3得到了Server1Server2的两票,再加上自己投给自己的一票。3票超过半数,顺利成为
  3. Server2也把自己的票数投给了自己,再加上Server1给的票数,总票数为2票,没有超过半数,也  无法成为leader,也学习Server1,顺水推舟,将自己所有的票数给了id比自己大的Server3。
  4. Server3得到了Server1Server2的两票,再加上自己投给自己的一票。3票超过半数,顺利成为leader
  5. Server4Server5都投给自己,但是无法改变Server3的票数,只好听天由命,承认Server3leader

2. 节点类型

  • 持久型(persistent):

持久化目录节点persistent)客户端与zookeeper断开连接后,该节点依旧存在

持久化顺序编号目录节点persistent_sequential)客户端与zookeeper断开连接后,该节 点依旧存在,创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调 递增的计数器,由父节点维护,例如:Znode001Znode002...

  • 短暂型(ephemeral):

临时目录节点ephemeral)客户端和服务器端断开连接后,创建的节点自动删除

临时顺序编号目录节点ephemeral_sequential)客户端与zookeeper断开连接后,该节点 被删除,创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增  的计数器,由父节点维护,例如:Znode001Znode002...

注意:序号是相当于i++,和数据库中的自增长类似。

3. 监听器原理(面试重点)

 

  1. main方法中创建Zookeeper客户端的同时就会创建两个线程,一个负责网络连接通信,一个负 责监听
  2. zookeeper监听到 数据变化 或 路径变化,就会将这个消息发送给监听线程
  3. zookeeper获得注册的监听事件后,立刻将监听事件添加到监听列表里
  4. 监听事件就会通过网络通信发送给zookeeper

常见的监听

  1. 监听节点数据的变化:get path [watch]
  2. 监听线程就会在内部调用process方法(需要我们实现process方法内容)
  3. 监听子节点增减的变化:ls path [watch]

4. 写数据流程

 1.Client 想向 ZooKeeper 的 Server1 上写数据,必须的先发送一个写的请求
2.如果Server1不是Leader,那么Server1 会把接收到的请求进一步转发给Leader。
3.这个Leader 会将写请求广播给各个Server,各个Server写成功后就会通知Leader。
4.当Leader收到半数以上的 Server 数据写成功了,那么就说明数据写成功了。
5.随后,Leader会告诉Server1数据写成功了。
6.Server1会反馈通知 Client 数据写成功了,整个流程结束。

节选自拉钩教育JAVA系列教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值