Zookeeper
作用:
分布式协调服务(监听hadoop是否宕机,宕机就使用另一个集群的hadoop)
在数仓领域的场景,协调hadoop服务实现高可用
每个zk服务里面存储的是状态信息
Zookeeper特性:
- 全局数据一致:集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征;(每个zk服务之间数据是同步的,相同的)
- 可靠性:如果消息被其中一台服务器接收,那么将被所有的服务器接收;(每个zk服务里存储的状态信息是一样的)
- 顺序性:在hadoop接受到请求以后,会通过一个或多个客户端连接zk然后产生状态信息,在多个客户端同时连接zk的时候,产生的状态信息会有顺序,在同步的时候,此顺序不变
- 数据更新原子性:一次数据更新要么全部成功(半数以上节点成功),要么全部失败,不存在中间状态;
- 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息;(客户端可以实时的接受到反馈信息)
Zookeeper角色:
zookeeper机器节点—多个zookeeper服务之间的角色划分:
- leader–领导者角色(负责管理维护多个zookeeper服务)
通过内部算法进行选举,选出leader服务算法中会采用过半机制
一旦选举出leader服务后,所有事务操作(保存、更新、删除)请求都需要交给leader处理 - follower–跟随者角色(处理获取数据请求,参与选举过程)
定时将当前状态告知给leader(心跳机制) - observer–观察者角色(处理查询请求,不参与选举过程)
zookeeper数据节点—zookeeper存储数据时的数据模型:
- 永久节点:保存的数据会一直存在
- 顺序永久节点:创建同一个节点时,会创建为顺序节点,在节点名称之前加序号
- 临时节点:在客户端连接过程中数据会存在,一旦客户端断开连接则数据自动删除
- 顺序临时节点
Zookeeper处理请求的过程:
- 处理事务操作(保存、更新、删除)请求:
- leader接收到请求:
①leader询问每台follower是否同意操作
②每台follower响应并回复leader(回复则同意,不回复则不同意)
③leader接收到follower的回复信息采用过半机制决定是否进行事务操作
④leader通知follower执行事务操作 - follower接收到请求:
①follower先把请求发送给leader
②与leader接收到请求后的过程一样 - observer接收到请求:
①observer先把请求发送给leader
②与leader接收到请求后的过程一样
- 处理非事务操作(查询)请求:
直接有observer(观察者)进行处理,观察者不参加选举过程
Zookeeper数据保存形式:
目录树状结构
每个存储节点(znode)里面存储着:保存的数据和子节点信息
zk数据是保存在内存上的,会有持久化机制,将数据定时保存在磁盘上
创建节点:
create /a 123
create /a/b 122
创建顺序节点:
create -s /a 111
无论是临时节点还是永久节点都不能重复创建,只有创建顺序节点
读取顺序节点时,需要加上序号才能读取
Zookeeper Watcher(监听机制):
原理:
zookeeper中引入了Watcher机制来实现分布式的通知功能
zookeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能
触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等
过程:
- 客户端向服务端注册Watcher
- 服务端事件发生触发Watcher
- 客户端回调Watcher得到触发事件情况
特点:
- 一次性触发
- 事件封装
- event异步发送
- 先注册再触发