ZooKeeper的使用一般都接触不到,因为平时工作甚少直接使用ZK。但是通过手动操作一下ZK,还是能对其中的门道了解各一二。

shell 常用命令

help 查看所有支持的命令

  1. [zk: localhost:2181(CONNECTED) 0] help
  2. ZooKeeper -server host:port cmd args
  3. stat path [watch]
  4. set path data [version]
  5. ls path [watch]
  6. delquota [-n|-b] path
  7. ls2 path [watch]
  8. setAcl path acl
  9. setquota -n|-b val path
  10. history
  11. redo cmdno
  12. printwatches on|off
  13. delete path [version]
  14. sync path
  15. listquota path
  16. rmr path
  17. get path [watch]
  18. create [-s] [-e] path data acl
  19. addauth scheme auth
  20. quit
  21. getAcl path
  22. close
  23. connect host:port

ls 查看路径下的所有节点

  1. [zk: localhost:2181(CONNECTED) 1] ls /
  2. [zk-book2, zk-book1, zk-book, zookeeper]

create 创建节点

创建临时节点:

  1. [zk: localhost:2181(CONNECTED) 3] create /xingoo 123
  2. Created /xingoo
  3. [zk: localhost:2181(CONNECTED) 4] create -e /xingoo-e 123
  4. Created /xingoo-e
  5. [zk: localhost:2181(CONNECTED) 6] ls /
  6. [zk-book2, zk-book1, zk-book, xingoo, zookeeper, xingoo-e]
  7. [zk: localhost:2181(CONNECTED) 8] quit
  8. Quitting...
  9. [zk: localhost:2181(CONNECTED) 0] ls /
  10. [zk-book2, zk-book1, zk-book, xingoo, zookeeper]

创建顺序节点:

  1. [zk: localhost:2181(CONNECTED) 2] create -s /xingoo-s 1
  2. Created /xingoo-s0000000018
  3. [zk: localhost:2181(CONNECTED) 3] create -s /xingoo-s 1
  4. Created /xingoo-s0000000019
  5. [zk: localhost:2181(CONNECTED) 4] create -s /xingoo-s 1
  6. Created /xingoo-s0000000020
  7. [zk: localhost:2181(CONNECTED) 5] create -s /xingoo-s 1
  8. Created /xingoo-s0000000021
  9. [zk: localhost:2181(CONNECTED) 7] ls /
  10. [zk-book2, zk-book1, zk-book, xingoo-s0000000018, zookeeper, xingoo, xingoo-s0000000020, xingoo-s0000000021, xingoo-s0000000019]

delete 删除节点

  1. [zk: localhost:2181(CONNECTED) 10] ls /
  2. [zk-book2, zk-book1, zk-book, xingoo-s0000000018, zookeeper, xingoo, xingoo-s0000000020, xingoo-s0000000021, xingoo-s0000000019]
  3. [zk: localhost:2181(CONNECTED) 11] delete /xingoo-s*
  4. Node does not exist: /xingoo-s*
  5. [zk: localhost:2181(CONNECTED) 12] delete /xingoo-s0000000020
  6. [zk: localhost:2181(CONNECTED) 13] ls /
  7. [zk-book2, zk-book1, zk-book, xingoo-s0000000018, zookeeper, xingoo, xingoo-s0000000021, xingoo-s0000000019]
  8. [zk: localhost:2181(CONNECTED) 14]

get 查询节点

  1. [zk: localhost:2181(CONNECTED) 14] get /xingoo
  2. 123
  3. cZxid = 0x5d
  4. ctime = Mon Apr 09 17:21:50 CST 2018
  5. mZxid = 0x5d
  6. mtime = Mon Apr 09 17:21:50 CST 2018
  7. pZxid = 0x5d
  8. cversion = 0
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 3
  13. numChildren = 0

Java API使用

完整的代码,可以参考《从PAXOS到ZOOKEEPER》,或者我的代码样例:

https://github.com/xinghalo/java-in-action/tree/master/src/cn/xingoo/book/zook/chap5

连接ZooKeeper

  1. public class ZooKeeper_Contructor_Usage implements Watcher {
  2. /**
  3. * 调用await()阻塞,当减到0时,恢复
  4. * http://www.importnew.com/15731.html
  5. */
  6. private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
  7. public static void main(String[] args) throws IOException {
  8. ZooKeeper zookeeper = new ZooKeeper("127.0.0.1:2181",5000,new ZooKeeper_Contructor_Usage());
  9. System.out.println(zookeeper.getState());
  10. try{
  11. connectedSemaphore.await();
  12. }catch (Exception e){
  13. System.out.println("zk session established");
  14. }
  15. }
  16. @Override
  17. public void process(WatchedEvent watchedEvent) {
  18. System.out.println("recieve watched event:"+watchedEvent);
  19. if(Event.KeeperState.SyncConnected == watchedEvent.getState()){
  20. connectedSemaphore.countDown();
  21. }
  22. }
  23. }

基于CountDownLatch做线程阻塞,ZooKeeper的构造方法中有几个重要的参数:

  • url,是连接地址,如果是多个地址拼接,可以做轮训;url后面还可以跟root目录
  • timeout,连接超时时间;如果连接断开,ZooKeeper会自动重连
  • watcher,默认的监控类

create 创建代码

  1. String path1 = zooKeeper.create("/zk-test-ephemeral-",
  2. "".getBytes(),
  3. ZooDefs.Ids.OPEN_ACL_UNSAFE,
  4. CreateMode.EPHEMERAL);

exist 判断是否存在

  1. zooKeeper.exists(path, true);

getData 查询数据

  1. zooKeeper.getData(watchedEvent.getPath(),true,stat)

setData 更新数据

这里的版本号用作CAS,后面会详细介绍

  1. zooKeeper.setData(path, "123".getBytes(), -1);

getChildren 查询所有子节点

  1. zooKeeper.getChildren(watchedEvent.getPath(),true)

注意,ZooKeeper客户端里面所有的watcher都是一次性的,如果想要监控每次事件,需要在watcher里面再次注册。

Zookeeper学习笔记——2 Shell和Java API的使用的更多相关文章

  1. Zookeeper学习笔记(三)——java客户端代码操作

    Zookeeper客户端java代码操作 上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作.通过查阅API,发现并不困难. 1. 首先获得客户端与服务器的连 ...

  2. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

  3. ZooKeeper 学习笔记

    ZooKeeper学习笔记 1.   zookeeper基本概念 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和Habase的重要组件,是为分布式应用提供一致性服 ...

  4. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  5. Zookeeper学习笔记(上)

    Zookeeper学习笔记 本篇主要是一些基本的介绍和API的使用介绍, 有些只是记录了知识点,而没有完全在笔记中详细解释, 需要自行查找资料补充相关概念 主要参考了课程中的内容: Zookeeper ...

  6. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  7. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

  8. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  9. ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...

随机推荐

  1. MariaDB:在Linux下修改编码

    参考网址:http://www.cnblogs.com/vingi/articles/4302330.html: # vi /etc/my.cnf [mysqld] init_connect='SET ...

  2. 域名调整 SEO优化(nginx)

    =============================================== 2019/3/31_第1次修改                       ccb_warlock == ...

  3. VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解

    ocp 学习笔记 20161126--------linux 笔记整理 一:安装linux系统环境: 1:linux 系统安装包下载路径:链接:链接: https://pan.baidu.com/s/ ...

  4. bind函数详解(转)

    var name = "The Window"; var object = { name: "My Object", getNameFunc: function ...

  5. Android strings.xml中定义字符串显示空格

    <string name="str">字 符 串</string> 其中   就表示空格.如果直接在里面键入空格,无论多少空格都只会显示一个. 用的XML转 ...

  6. c# windows服务如何获取自己的安装路径

    public static string GetWindowsServiceInstallPath(string ServiceName)        {            string key ...

  7. BZOJ4972 八月月赛 Problem B 小Q的方格纸 二维前缀和

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4972 八月月赛Problem B 题目概括 一个矩阵,一坨询问,问矩阵中一个特定方向的等腰直角三角 ...

  8. python str,list,tuple转换

      1. str转listlist = list(str) 2. list转strstr= ''.join(list) 3. tuple list相互转换tuple=tuple(list)list=l ...

  9. hdu 2036 求多边形面积 (凸、凹多边形)

    <题目链接> Problem Description “ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考 ...

  10. xss总结--2018自我整理

    0x00前言 因为ctf中xss的题目偏少(因为需要机器人在后台点选手的连接2333),所有写的比较少 这里推荐个环境http://test.xss.tv/ 0x01xss作用 常见的输出函数:pri ...