Zookeeper

随声附和 提交于 2019-11-26 08:58:59

什么是Zookeeper

Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

1、zookeeper是为别的分布式程序服务的

2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等

4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 
并为用户程序提供数据节点监听服务;

启动单机

1.Zoolnspector文件

 

  1. 在里面创建一个data空文件夹

 

  1. 把conf里面的zoo....改成zoo.cfg

 

  1. 右键zoo.cfg以记事本打开,把data文件夹路径放里面

 

  1. 点击bin—zkServer.cmd和zkCli.cmd输入 ls /回车完成

Zookeeper说明


创建节点(znode) 方法:
create:
提供了两套创建节点的方法,同步和异步创建节点方式。

同步方式:
参数1,节点路径《名称) : InodeName (不允许递归创建节点,也就是说在父节点不存在
的情况下,不允许创建子节点)
参数2,节点内容: 要求类型是字节数组(也就是说,不支持序列化方式,如果需要实现序
列化,可使用java相关序列化框架,如Hessian、Kryo框架)
参數3,节点权限: 使用Ids.OPEN_ACL_UNSAFE开放权限即可。(这个参数一般在权展
没有太高要求的场景下,没必要关注)
参数4,节点类型: 创建节点的类型: CreateMode,提供四种首点象型
PERSISTENT(持久节点)
PERSISTENT SEQUENTIAL(持久顺序节点)

EPHEMERAL(临时节点)
EPHEMERAL SEQUENTAL(临时顺序节点)

  1. 引入依赖

<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.6</version>
</dependency>

Zookeeper客户端连接

  1. 实现增删改查

private static final String ZK_ADDRESS="0.0.0.0:2181";
private static final Integer ZK_TIMEOUT=2000;

public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
    //连接zookeeper
    //步骤一:创建zookeeper对象
    /*
    参数一:代表连接地址
     */
    ZooKeeper zooKeeper=new ZooKeeper(ZK_ADDRESSZK_TIMEOUT, new Watcher() {
        //连接方法
        @Override
        public void process(WatchedEvent watchedEvent) {
            System.out.println("成功建立连接!");
        }
    });
    //创建节点
    String result=zooKeeper.create("/zk01","zkvalue01".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    System.out.println("创建成功:"+result);
   /* //更改节点
    Stat stat = zooKeeper.setData("/zk01", "zkvalueset01".getBytes(), 0);
    System.out.println("更改成功"+stat);*/
    /*//获取节点
    byte[] value = zooKeeper.getData("/zk01",false,new Stat());
    System.out.println(new String(value,"UTF-8"));*/
    /*//删除
    zooKeeper.delete("/zk01",-1);*/
    //关闭连接
    zooKeeper.close();
}

Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。Zookeeper常用的四字命令见下图所示。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!