python 操作 zookeeper 快速入门
什么是zookeeper
什么是zookeeper : 这篇zookeeper讲的还满清楚的
python 操作 zk 快速入门
今年开始接触第五门开发语言了, 以前总听说python 性能低,真正接触到一个python项目后才发现它强大之处,刷新了对python的认知,短短几十个文件居然就实现一个很强大的服务应用,废话不多说,写demo。
docker快速启动一个zk
C:\Users\sola>docker search zookeeper
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
zookeeper Apache ZooKeeper is an open-source server wh… 822 [OK]
jplock/zookeeper Builds a docker image for Zookeeper version … 164 [OK]
docker pull zookeeper
docker run -p 2181:2181 zookeeper:latest
这样我们的测试服务就快速起来了。
接着使用python的zookeeper接口的kazoo来做一次增删改查。
zk节点
在Zookeeper中,“节点"分为两类:
第一类同样是指构成集群的机器,为机器节点;
第二类则是指数据模型中的数据单元,数据节点一一ZNode。
Zookeeper维护一个类似文件系统的数据结构,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。
Zookeeper将所有数据存储在内存中,数据模型是一棵树(Znode Tree),由斜杠(/)的进行分割的路径,就是一个Znode,例如/foo/path1。每个上都会保存自己的数据内容,同时还会保存一系列属性信息。
在Zookeeper中,node可以分为持久节点和临时节点两类:
创建节点
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.0.75.2:2181')
zk.start() #与zookeeper连接
zk.create('/demo/Znode/0001', b'a demo node', makepath=True)
#node = zk.get_children('/') # 查看根节点有多少个子节点
#print(node)
zk.stop() #与zookeeper断开
查询节点
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.0.75.2:2181')
zk.start() #与zookeeper连接
#zk.create('/demo/Znode/0001', b'a demo node',makepath=True)
node = zk.get_children('/') # 查看根节点有多少个子节点
print(node)
print(zk.get(/demo/Znode/0001))
zk.stop() #与zookeeper断开
修改节点
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.0.75.2:2181')
zk.start() #与zookeeper连接
#zk.create('/demo/Znode/0001', b'a demo node',makepath=True)
zk.set('/demo/Znode/0001', b"alter demo node!")
node = zk.get('/demo/Znode/0001') # 查看根节点有多少个子节点
print(node)
zk.stop() #与zookeeper断开
删除节点
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.0.75.2:2181')
zk.start() #与zookeeper连接
#zk.create('/demo/Znode/0001', b'a demo node', makepath=True)
zk.delete('/demo', recursive=True)
node = zk.get_children('/') # 查看根节点有多少个子节点
print(node)
zk.stop() #与zookeeper断开
python 操作zk的一个入门文章,当然zk能实现的功能远不止这么简单,还有Watcher、Session、ACL等重要概念、
zookeeper能实现集群管理,分布式锁,分布式队列,zookeeper集群leader选举等等。