1 ,zookeeper :概述
1.1,zookeeper:作用
1 ,大数据领域 :存储配置数据
例如:hadoop 的 ha 配置信息,hbase 的配置信息,都存储在 zookeeper
2 ,应用领域 :分布式锁
分布式锁,虽然 zk 也能做,但是更加推荐使用 redis ,更合适。
1.2,zookeeper:开发 - java
java 语言开发的。
1.3,qps :10w
1 ,3 台主机的 zk 集群,qps 可以达到 :10w 左右。
2 ,zookeeper :架构
2.1,架构图 :
2.2,leader :主节点
1 ,角色 :
集群的主节点
2 ,作用 :
1 ,处理客户端请求 :读,写。
2 ,服务器内部 :调度者,将写请求,发送给每个系节点。
3 ,事务:保证事务处理的有序性。
2.2,follower :从节点
1 ,角色 :
集群的从节点
2 ,作用 :
1 ,处理客户端请求 :读。
2 ,写请求 :转发给 leader 处理。
3 ,选举:leader 挂了,follower 要参与 leader 选举。
4 ,存储:leader 存储数据的时候,需要每个从节点,根据leader提议,在本地存储数据。
2.3,observer :观察者节点
1 ,角色 :
集群的从节点
2 ,作用 :
1 ,处理客户端请求 :读。
2 ,写请求 :转发给 leader 处理。
3 ,选举:不参与
4 ,同步:从主节点同步数据。
3 ,zookeeper :数据处理
3.1,最终一致性 :
意义 :数据同步不及时,但是最终,数据是一致的。
3.2,获取 :最新数据
1 ,由于 :
zookeeper 的数据更新,不及时。
2 ,client 想获取最新数据,需要在读取数据前,先调用这个接口 :
sync()
3 ,sync() 作用 :
1 ,目的 :client 连接的当前从节点,向 leader 发请求,需要同步最新数据。
2 ,leader 响应 :如果没有心数据,直接返回响应【Leader.SYNC】
如果有新数据,需要处理完最新数据,才返回响应【Leader.SYNC】,从节点收到响应后,将最新数据,返回给 client 。
3.3,数据操作 :写入流程,leader
1 ,leader 接收请求
2 ,leader 发送 proposal 给 follower
3 ,follower 收到请求记录 txlog、snapshot、
4 ,follower 发送 ack 给 leader
5 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
6 ,leader 返回成功给客户端
3.4,数据操作 :写入流程,follower
1 ,follower 接受请求,解析请求。
2 ,转发 :follower 将写请求转发给 leader
3 ,leader接收请求
4 ,leader 发送 proposal 给 follower
5 ,follower 收到请求记录 txlog、snapshot、
6 ,follower 发送 ack 给 leader
7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
8 ,follower 返回成功给客户端。
3.5,数据操作 :写入流程,observer
1 ,observer 接受请求,解析请求。
2 ,转发 :observer 将写请求转发给 leader
3 ,leader接收请求
4 ,leader 发送 proposal 给 follower
5 ,follower 收到请求记录 txlog、snapshot、
6 ,follower 发送 ack 给 leader
7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
8 ,observer 返回成功给客户端。
3.6,数据操作 :写入流程,注意
1 ,leader 发送 proprsal 决议 :
只给 follower 发送
4 ,zookeeper :数据 - znode
4.1,数据结构 :树形
zookeeper 数据存储在树形结构上
4.2,znode :数据节点
1 ,znode 节点 :
存储数据 :例如,abcde
有路径 :例如,/a/b/c/d
4.3,znode :数据大小 - 1m
每个 znode ,只能存储最多 1m 数据
4.4,znode :watcher - 观察者
1 ,可监听的事件 :4 种
节点创建
节点删除
节点数据改变
节点的子节点列表发生变更。
2 ,