# 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获取/设置ACL5.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