zookeeper 实践

一、数据存储

   事务日志,快照日志,运行时日志  bin/zookeeper.out

二、基于 Java API 初探 zookeeper 的使用

1、建立连接的过程

 public static void main(String[] args) {
        try {
            final CountDownLatch countDownLatch = new CountDownLatch(1);
            ZooKeeper zooKeeper = new
                    ZooKeeper("192.168.11.153:2181," +
                    "192.168.11.154:2181,192.168.11.155:2181",
                    4000, new Watcher() {
                @Override
                public void process(WatchedEvent event) {
                    if (Event.KeeperState.SyncConnected == event.getState()) { //如果收到了服务
                        端的响应事件,连接成功
                        countDownLatch.countDown();
                    }
                }
            });
            countDownLatch.await();
            System.out.println(zooKeeper.getState());//CONNECTING
            zooKeeper.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

数据的增删改查操作

//添加节点
zooKeeper.create("/zk-persis-mic","0".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
Thread.sleep(1000);
Stat stat=new Stat();
//得到当前节点的值
byte[] bytes=zooKeeper.getData("/zk-persis-
mic",null,stat);
System.out.println(new String(bytes));
//修改节点值
zooKeeper.setData("/zk-persis-
mic","1".getBytes(),stat.getVersion());
//得到当前节点的值
byte[] bytes1=zooKeeper.getData("/zk-persis-
mic",null,stat);
System.out.println(new String(bytes1));
zooKeeper.delete("/zk-persis-
mic",stat.getVersion());
zooKeeper.close();
System.in.read();
 

三、事件机制

      Watcher 监听机制是 Zookeeper 中非常重要的特性,我们 基于 zookeeper 上创建的节点,可以对这些节点绑定监听 事件,比如可以监听节点数据变更、节点删除、子节点状 态变更等事件,通过这个事件机制,可以基于 zookeeper 实现分布式锁、集群管理等功能

       watcher 特性:当数据发生变化的时候, zookeeper 会产 生一个 watcher 事件,并且会发送到客户端。但是客户端 只会收到一次通知。如果后续这个节点再次发生变化,那 么之前设置 watcher 的客户端不会再次收到消息。 (watcher 是一次性的操作)。 可以通过循环监听去达到 永久监听效果

如何注册事件机制

       通过这三个操作来绑定事件 :getData、Exists、getChildren

        如何触发事件? 凡是事务类型的操作,都会触发监听事件。create /delete /setData

watcher 事件类型

None (-1), 客户端连接状态发生变化的时候会收到none的事件
NodeCreated (1), 创建节点的事件 比如zk-persis-mic
NodeDeleted (2),   删除节点的事件
NodeDataChanged (3), 节点数据发生变更 
NodeChildrenChanged (4); 子节点被创建、被删除、会发生事件触发

什么样的操作会产生什么类型的事件呢?

 zk-persisi-mic(监听事件)zk-persist-mic/child(监听 事件)

create(/zk-persis- mic)

NodeCreated(exists/getData)

delete(/ zk- persis- mic)

NodeDeleted(exists / getData)

setData(/ zk- persis- mic)

NodeDataChanged(exis ts / getData)

create ( /zk- persis- mic/children)

NodeChildrenChange d(getchild)

NodedCreated

delete ( /zk- persis- mic/children)

NodeChildrenChange d(getchild)

NodedDeleted

setData(/zk- persis- mic/children)

 

NodeDataChange d

事件的实现原理

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值