zookeer-梳理及知识点解析之ZAB算法及基本使用

zookeer-梳理及知识点解析之ZAB算法及基本使用

1.ZAB选举过程描述

1.1选举场景

a.集群第一次启动

b.集群重启,leader挂了

1.2 leader满足的条件

a.经验最丰富 zxid

b.myid

c.过半通过的数据才是真数据,你见到的可用的zxid

1.3 ZK选举过程

a.3888造成两两连通

b.只要任何人投票都会出发那个准leader投票

c.推选制,先比较zxid,如果zxid相同,再比较myid

2.具体案例描述选举过程

集群4台机器,3台过半

在这里插入图片描述

选举过程描述:

a.当leader node04挂了后,假设node01率先发起投票,他将投票请求发送分别发送node02和node03,同时投自己一票。

b.当node02收到请求后,将请求信息中的zxid和自己本地zxid做比较,如果node02中的zxid大于node01的zxid,将触发node02发起投票,将自己投票请求发送给node01和node03,

c.当node01收到node02的投票请求后,发现node02的zxid,大于自己本地zxid,它将支持node02,放弃选举自己。

d.同理node03也会和node02进行相同的操作。

b.最终会快速选举出leader,恢复集群可用信息。

3.zookeeper client API基本使用

`

public class ZookeeperApp{
  public static void main(String[] args){

	  //zk有session的概念,没有连接池的概念
      //watch: 观察回调,回调。
      //watch的注册值发生在 读类型调用
      //第一类:new zk 时候,传入的watch,这个watch,session级别的,跟path 、node没有关系

  Zookeeper zk = new Zookeeper("192.168.7.230:2181,192.168.7.241:2181,192.168.7.71:2181",5000,new Watcher(){

      @Overridde
      public void process(WatchedEvent event){
        Event.KeeperState state = event.getState();
        Event.EventType type = event.getType();
        String path = event.getPath();
        switch(state){
        	case Unknown:
        	break;
        	case Disconnected:
        	break;
        	case NoSyncConnected:
        	break;
        	case SyncConnected:
        	break;
        	case AuthFailedbreak;
        	case connectedReadOnly:
        	break;
        	case SaslAuthenticated:
        	break;
        	case Expire:
        	break;
        }
        switch(type){
        	case None:
        	break;
        	case NodeCreated:
        	break;
        	case NodeDeleted:
        	break;
        	case NodeDataChanged:
        	break;
        	case NodeChildrenChanged:
        	break;
        }
   	  }
   });
    Zookeeper.State state = zk.getState();
    switch(state){
        case CONNECTING:
            break;
        case ASSOCIATING:
            break;
        case CONNECTD:
            break;
        case CONNECTEDREADONLY:
            break;
        case CLOSED:
            break;
        case AUTH_FAILED:
            break;
        case NOT_CONNECTED:
            break;
    }
    String pathName = zk.create("/bigData","hadoop".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CREATE_MODE.EPHEMERAL);
      Stat stat = new Stat();
      byte[] node = zk.getData("/bigData",new Watcher(){
          
          @Overridde
          public void process(WatchedEvent envnt){
              zk.getData("/bigData",stat);
          }
      },stat);
	  Stat stat1 = zk.setData("/bigData","spark".getBytes(),0);
      Stat stat2 = zk.setData("/bigData","spark01".getBytes(),stat1.getVersion());
      
      zk.getData("/bigData",false,new AsyncDataCallback.DataCallback(){
          @Overridde
          public void processResult(int rc,String path,Object ctx,byte[] data,Stat stat){
              System.out.println(new String(data));
          }
      },"hadoop");
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yongge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值