Zookeeper基础

Zookeeper 基础

Zookeeper(以下简称ZK), 动物管理员。是一个分布式应用程序的协调服务框架,是Hadoop的一个重要组成组件。

分布式应用需要解决的问题:

  • 数据一致性
  • 统一的命名服务
  • 配置管理
  • 分布式锁
  • 集群管理

ZK安装

参见官网教程…(需要安装在Linux系统下)

ZK指令和数据结构

ZK有一个最开始的节点(/)。ZK的节点叫做znode节点,每个znode节点都可以存储数据,每个znode节点都可以创建自己的子节点。

znode和ZK根节点组成了一个znode树。znode树维系在内存中,查询起来是很快的。

每个znode都有一个名称,并且这个名称是唯一的。

要想运行ZK的指令,需要先启动ZKServer,然后启动ZKClient。

在ZK的bin路径下,执行下面两个命令:

./zkServer.sh start
./zkCli.sh

启动ZK客户端后可以进入ZK的命令行模式,有如下常见的命令:

  • ls: 查看节点,例如:ls /
  • create znode data:创建节点,例如:create /zk01 hello
    • 不加参数表示创建普通持久节点
    • 加上-e参数表示创建普通临时节点,这样的节点在连接断开后将会消失。利用临时节点可以检查集群节点有没有挂掉。注意临时节点不能拥有子节点。
    • 加上-s表示创建一个顺序持久节点,这样的节点在不同的服务器抢占时会产生一个递增的顺序号。利用它可以实现分布式锁。
    • 加上-s -e就表示创建临时顺序持久节点。
  • get znode:查看节点数据,含有以下信息:
    • DATA: 具体数据
    • cZxid: 节点创建时的zxid
    • ctime: 创建节点的时间戳
    • mZxid: 节点最新一次更新发生的zxid
    • mtime: 修改此节点数据的最新时间戳
    • cversion: 子节点的更新次数
    • dataVsersion: 数据版本号,每次数据发生修改,递增1
    • aclVersion: 节点ACL(授权信息)更新次数
    • ephemeralOwner: 如果节点为临时的,表示和该节点绑定的session id。如果不是则为0。
    • dataLength: 数据大小
    • numChildren: 子节点个数
  • set znode data: 修改节点数据
  • delete znode: 删除一个节点。注意如果节点有子节点则禁止删除。
  • quit: 退出ZK客户端

对于ZK集群中每个节点来说,znode树都是一致的,命名也是完全一致的。具体在后面会有介绍。S

ZK API

Zookeeper是由Java实现的分布式框架。下面我们来看如果通过Java程序来操作znode。

基本方法

ZooKeeper是一个类,构造方法参数如下:

  • connectString: 包含连接信息的字符串,格式是:zk服务IP地址:端口号。zk默认服务监听端口是2181。
  • sessionTimeout: 表示会话的超时时间,单位是ms。
  • watcher: 观测者对象

在默认情况下,创建时采用的是非阻塞的模式。

以下代码可以检测是否连接上zkServer:

public class TestConnect {
   

    public static void main(String[] args) throws IOException {

        ZooKeeper zk = new ZooKeeper("192.168.117.21:2181", 3000,
            (watchedEvent) -> System.out.println("连接成功!")
        );

        while (true);

    }

}

加上while(true)是为了防止main线程提前结束导致”连接成功”无法被及时打印出来。

在连接的时候可能产生java.net.ConnectException。这是因为在服务器上没有打开zkServer。

我们可以使用闭锁的技术来保证Zookeeper连接成功再执行接下来的代码:

public class TestConnect {
   

    public static void main(String[] args) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值