欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper 实践

程序员文章站 2022-07-13 09:38:49
...

一、数据存储

   事务日志,快照日志,运行时日志  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

事件的实现原理

zookeeper 实践

 

zookeeper 实践

相关标签: zookeeper

上一篇: CTS实践

下一篇: Lambda实践