# 20200926 大数据学习计划-ZooKeeper基础知识
一、角色:
1.领导者(Leader):负责投票的发起和决议,以及更新系统的状态。
2.跟随者(Follower):用于接受客户端的请求并返回结果,参与投票。
3.观察者(Observer):同步领导者的数据,不参与投票。
二、ZNode数据结构:
1.stat:为状态信息, 描述该 Znode 的版本、权限等信息。
2.data:与该 Znode 相关的数据。
3.children:该 Znode 下的子节点。
三、ZNode节点类型:
四种类型:临时有序、临时无序、持久有序和持久无序。Znode 的类型在创建时确定并且之后不能再修改。
五、原语操作:
1.create:创建ZNode(父ZNode必须存在)
2.delete:删除ZNode(没有子ZNode)
3.exists:测试节点是否存在,并获取它的元数据
4.getACL/setACL:为ZNode获取/设置ACL
5.getChilder:获取ZNode所有子节点的列表
6.getData/setData:获取/设置ZNode相关数据
7.sync:使客户端的ZNode视图和ZooKeeper的视图同步
六、ZAB协议:消息广播和崩溃恢复。
1.消息广播:基于有FIFO特性的TPC协议来进行通信。事务的提交类似二段提交,比二段提交简单。过程如下
Leader提出事务Proposal(每个事务都有一个编号-ZXID,ZXID越大代表事务越新),所有Follower以事务日志写入本地磁盘,然后返回ACK,当Leader收到超过半数的节点返回ACK则发出Commit,Follower节点收到commit之后则提交事务。
2. 崩溃恢复:消息广播使用简单的二段提交,没办法解决Leader节点崩溃的问题,需要通过崩溃恢复的模式来解决该问题
崩溃恢复遵循两个原则
>确保执行那些已经被Leader提出的事务
>确保丢弃那些只被Leader提交的事务
基于以上原则,实现了Leader选举的方法,如下:
1.选择ZXID最大的节点作为新Leader的候选节点
2.当ZXID一致时,可以通过myid(可以通过配置来设置)来确定Leader