ZooKeeper API使用

kazoo

zk是用java开发的,因此sdk对java支持比较好,我们使用的是python语言,借助第三方库kazoo,网站 https://kazoo.readthedocs.io/en/latest/index.html 网站里面有比较详细地介绍kazoo的使用方法和注意事项,我们这里只列举常见的使用方法,具体深入的请前往网站仔细阅读。

安装

安装kazoo比较简单,yum可以使用

ZooKeeper API使用

pip可以使用

ZooKeeper API使用

安装成功之后,我们验证一下是否安装可用

ZooKeeper API使用

CRUD例子

我们先写一个最简单的节点CRUD例子,kazoo这个库它内部会开工作线程执行相关连接和指令操作,不会阻塞主线程,还有在kazoo线程再去执行zk的指令操作会卡死整个程序,这个是需要注意的。

ZooKeeper API使用

ZooKeeper API使用

监听

除了CRUD常用操作以外,还有一个非常实用的功能就是监听节点(可以是节点的添加、删除、节点的数据更新)。kazoo提供了2种监听节点的方法,第一种是比较简单的,如下面官方提供的代码例子:

  1. def my_func(event):

  2.    # check to see what the children are now


  3. # Call my_func when the children change

  4. children = zk.get_children("/my/favorite/node", watch=my_func)

这种监听方法,当对应节点触发了,只会通知回调一次,如果需要继续监听需要再手动设置多次监听函数。下面介绍另外一种监听方法,只需要设定一次,每次有事件都会通知到回调函数而且通知类型数据比较丰富。下面列的是官方的例子代码片段,使用了python的装饰器。

  1. @zk.ChildrenWatch("/my/favorite/node")

  2. def watch_children(children):

  3.    print("Children are now: %s" % children)

  4.    # Above function called immediately, and from then on


  5. @zk.DataWatch("/my/favorite")

  6. def watch_node(data, stat):

  7.    print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))

一个完整的监听例子代码

ZooKeeper API使用

ZooKeeper API使用

测试

先运行测试程序,然后再开一个新的ssh中断使用zkCli.sh连接zk,执行以下测试指令

  1. #创建一个测试节点

  2. create /my/favorite/test 'test'


  3. #删除测试节点

  4. delete /my/favorite/test


  5. #设置节点数据

  6. set /my/favorite/node '123'

测试程序先后输出如下

ZooKeeper API使用

上一篇:序列化组件


下一篇:分组表管理之获取用户组表列表数据