Zookeeper相关笔记

相关定义:Zookeeper类似于一个树形文件系统,Zookeeper里面的文件既可以是文件也可以是文件夹,每个文件都可以有子文件,这样的每个文件叫做Znode,每个Znode都很小,大小在千字节(kilobyte range)。

相关功能:Zookeeper支持监听机制(watches),client可以在Znode上注册一个监听事件,当Znode发生变化的时候会通知client,当client于Zookeeper断开连接,client也会收到相应的通知。

Zookeeper特性
1.顺序一致性 按照客户端发送请求的顺序更新
2.原子性:更新要么成功,要么失败,不会出现部分更新
3.单一性:无论客户端连接哪个sever,看到的数据都相同
4.可靠性:一旦数据更新成功,将一直保持一致
5.及时性:客户端会在一个确定的时间内得到数据

Zookeeper linux安装单机版
1.下载zookeeper-3.4.12.tar.gz,上传服务器解压
2.进入conf目录,修改zoo_sample.cfg为zoo.cfg,具体zoo.cfg配置详情可以自定义
3.启动Zookeeper服务,./zkServer.sh start
4.测试连接,./zkCli.sh

Zookeeper Java使用

<!-- zookeeper依赖包-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.12</version>
</dependency>
/**
 * Zookeeper 基本操作
 * @author xiang.xin
 */
public class Zookeeper01 implements Watcher{

    private static ZooKeeper zk = null;
    private static CountDownLatch countDownLatch = new CountDownLatch(1);
    private static Stat stat = new Stat();

    public static void main(String[] args) {
        try {
            String path = "/zk";
            zk = new ZooKeeper("192.168.1.250:2181",5000,new Zookeeper01());
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            try {
                zk.create(path,new String("zookeeper").getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            try {
                Thread.sleep(Integer.MAX_VALUE);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        /**
         * 连接成功
         */
        if(Event.KeeperState.SyncConnected == watchedEvent.getState()){
            System.out.println("Zookeeper连接成功====");
            if(Event.EventType.None == watchedEvent.getType() && watchedEvent.getPath() == null){
                countDownLatch.countDown();
            }
            if(Event.EventType.NodeDataChanged == watchedEvent.getType()){
                try {
                    System.out.println("Zookeeper配置发生改变===="+new String(zk.getData(watchedEvent.getPath(),true,stat)));
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            if(Event.EventType.NodeDeleted == watchedEvent.getType()){
                try {
                    System.out.println("Zookeeper配置删除===="+new String(zk.getData(watchedEvent.getPath(),true,stat)));
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            if(Event.EventType.NodeCreated == watchedEvent.getType()){
                try {
                    System.out.println("Zookeeper配置创建===="+new String(zk.getData(watchedEvent.getPath(),true,stat)));
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }else {
            System.out.println("Zookeeper连接失败====");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值