大数据讲课笔记6.3 ZooKeeper两种重要机制

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据讲课笔记6.3 ZooKeeper两种重要机制相关的知识,希望对你有一定的参考价值。

文章目录

零、学习目标

  1. 掌握Watcher机制的通知状态和事件类型
  2. 掌握选举机制的类型

一、导入新课

  • 上一节中,主要讲解了ZooKeeper的数据模型。ZooKeeper分布式协调服务提供了两种重要的机制,分别是Watcher机制和选举机制。其中,Watcher机制用于实现分布式的通知功能。ZooKeeper提供的选举机制是用于保证各节点的协同工作。因此,本节将针对ZooKeeper的Watcher机制和选举机制行详细讲解。

二、新课讲解

(一)Watcher机制

1、Watcher机制

  • 在ZooKeeper中,引入了Watch机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务端注册一个Watch监听,当服务端的一些事件触发了这个Watch,那么就会向指定客户端发送一个事件通知,来实现分布式的通知功能。

2、Watcher架构

  • Watcher实现包含三个部分:Zookeeper服务端、Zookeeper客户端、客户端的ZKWatchManager对象
  • 客户端首先将Watcher注册到服务端,同时将Watcher对象保存到客户端的Watch管理器中。当ZooKeeper服务端监听的数据状态发生变化时,服务端会主动通知客户端,接着客户端的Watch管理器会触发相关Watcher来回调相应处理逻辑,从而完成整体的数据发布/订阅流程。

3、Watcher特性

特性说明
一次性Watcher是一次性的,一旦被触发就会移除,再次使用时需要重新注册
客户端顺序回调Watcher回调是顺序串行化执行的,只有回调后客户端才能看到最新的数据状态。一个Watcher回调逻辑不应该太多,以免影响别的watcher执行
轻量级WatchEvent是最小的通信单元,结构上只包含通知状态、事件类型和节点路径,并不会告诉数据节点变化前后的具体内容
时效性Watcher只有在当前session彻底失效时才会无效,若在session有效期内快速重连成功,则watcher依然存在,仍可接收到通知

4、Watcher接口设计

  • Watcher是一个接口,任何实现了Watcher接口的类就是一个新的Watcher。Watcher内部包含了两个枚举类:KeeperState(通知状态)、EventType(事件类型)。

5、Watcher通知状态

  • KeeperState是客户端与服务端连接状态发生变化时对应的通知类型。路径为org.apache.zookeeper.Watcher.Event.KeeperState,是一个枚举类。
枚举属性说明
Unknown(-1)属性过期
Disconnected(0)客户端与服务器断开连接时
NoSyncConnected(1)属性过期
SyncConnected(3)客户端与服务器正常连接时
AuthFailed(4)身份认证失败时
ConnectedReadOnly(5)3.3.0版本后支持只读模式,一般情况下ZK集群中半数以上服务器正常,zk集群才能正常对外提供服务。该属性的意义在于:若客户端设置了允许只读模式,则当zk集群中只有少于半数的服务器正常时,会返回这个状态给客户端,此时客户端只能处理读请求
SaslAuthenticated(6)服务器采用SASL做校验时
Expired(-112)会话session失效时

6、Watcher事件类型

  • EventType是数据节点(znode)发生变化时对应的通知类型。EventType变化时KeeperState永远处于SyncConnected通知状态下;当KeeperState发生变化时,EventType永远为None。其路径为org.apache.zookeeper.Watcher.Event.EventType,是一个枚举类。
枚举属性说明
None (-1)
NodeCreated (1)Watcher监听的数据节点被创建时
NodeDeleted (2)Watcher监听的数据节点被删除时
NodeDataChanged (3)Watcher监听的数据节点内容发生变更时(无论内容数据是否变化)
NodeChildrenChanged (4)Watcher监听的数据节点的子节点列表发生变更时
  • 说明:客户端接收到的相关事件通知中只包含状态及类型等信息,不包括节点变化前后的具体内容,变化前的数据需业务自身存储,变化后的数据需调用get等方法重新获取。

(二)选举机制

1、选举机制概述

  • ZooKeeper为了保证各节点的协同工作,在工作时需要一个Leader角色,而ZooKeeper默认采用FastLeaderElection算法,且投票数大于半数则胜出的机制。

(1)服务器ID

  • 设置集群myid参数时,参数分别为服务器1、服务器2、服务器3,编号越大FastLeaderElection算法中权重越大。

(2)选举ID

  • 选举过程中,ZooKeeper服务器有四种状态,分别为竞选状态随从状态观察状态领导者状态

(3)数据ID

  • 数据ID是服务器中存放的最新数据版本号,该值越大则说明数据越新,在选举过程中数据越新权重越大。

(4)逻辑时钟

  • 逻辑时钟被称为投票次数,同一轮投票过程中逻辑时钟值相同,逻辑时钟起始值为0,每投一次票,数据增加。与接收到其它服务器返回的投票信息中数值比较,根据不同值做出不同判断。

2、选举机制类型

  • ZooKeeper选举机制有两种类型,分别为全新集群选举和非全新集群选举。全新集群选举是新搭建起来的,没有数据ID和逻辑时钟的数据影响集群的选举;非全新集群选举时是优中选优,保证Leader是ZooKeeper集群中数据最完整、最可靠的一台服务器。

(1)全新集群选举

  • 假设有5台编号分别是1~5的服务器,全新集群选举过程如下:
步骤操作
步骤1服务器1启动,先给自己投票;其次,发投票信息,由于其它机器还没有启动所以它无法接收到投票的反馈信息,因此服务器1的状态一直属于竞选状态。
步骤2服务器2启动,先给自己投票;其次,在集群中启动ZooKeeper服务的机器发起投票对比,它会与服务器1交换结果,由于服务器2编号大,服务器2胜出,服务器1会将票投给服务器2,此时服务器2的投票数并没有大于集群半数,两个服务器状态依旧是竞选状态。
步骤3服务器3启动,先给自己投票;其次,与之前启动的服务器1、2交换信息,服务器3的编号最大,服务器3胜出,服务器1、2会将票投给服务器3,此时投票数正好大于半数,所以服务器3成为领导者状态,服务器1、2成为追随者状态。
步骤4服务器4启动,先给自己投票;其次,与之前启动的服务器1、2、3交换信息,尽管服务器4的编号大,但是服务器3已经胜,所以服务器4只能成为追随者状态。
步骤5服务器5启动,同服务器4一样,均成为追随者状态。

(2)非全新集群选举

步骤操作
步骤1统计逻辑时钟是否相同,逻辑时钟小,则说明途中可能存在宕机问题,因此数据不完整,那么该选举结果被忽略,重新投票选举。
步骤2统一逻辑时钟后,对比数据ID值,数据ID反应数据的新旧程度,因此数据ID大的胜出。
步骤3如果逻辑时钟和数据ID都相同的情况下,那么比较服务器ID(编号),值大则胜出。

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。

四、上机操作

  • 形式:单独完成
  • 题目:深入了解ZooKeeper两种重要机制
  • 要求:观看尚硅谷大数据视频涉及ZooKeeper两种重要机制这部分内容,然后撰写一篇学习报告。

以上是关于大数据讲课笔记6.3 ZooKeeper两种重要机制的主要内容,如果未能解决你的问题,请参考以下文章

大数据讲课笔记6.4 ZooKeeper分布式集群部署

大数据讲课笔记6.4 ZooKeeper分布式集群部署

大数据讲课笔记6.2 ZooKeeper数据模型

大数据讲课笔记6.5 ZooKeeper的Shell操作

大数据讲课笔记6.5 ZooKeeper的Shell操作

大数据讲课笔记6.6 ZooKeeper的Java API操作