Zookeeper数据模型
基本概念:结点和结构
zookeeper的数据模型与Linux的文件系统很相似,都是采用树形结构。每一个Linux中的目录对应数据模型的一个结点,结点还是用目录的形式进行表示。如下图/testQueue就是一个结点,既可以存储数据也可以挂载其他节点。
结点类型
顺序结点:在创建父节点时可以指定参数让子节点是有按顺序的。
持久结点:结点一旦创建就会一直在zookeeper服务器上,只有进行删除操作时才会被删除。默认子结点是无序的。
临时结点:只有客户端连接zookeeper服务器建立会话才会存在,一旦会话失效,临时结点就会被删除。默认子结点是无序的。
持久顺序结点:创建父节点时指定参数sequence=Ture。其子结点是有序的,其他与持久结点性质类似。
临时顺序结点:创建父节点时指定参数sequence=Ture。其子结点是有序的,其他与临时结点性质类似。
代码实现
可以从不同的客户端访问zookeeper。
from kazoo.client import KazooClient
hosts = "192.168.45.103:2181" #要连接的zookeeper服务器ip地址+端口
zk = KazooClient(hosts=hosts)
zk.start()
#创建结点插入数据
zk.ensure_path('/test_zq')
zk.create('/test_zq/node1',b'0001')
zk.create('/test_zq/node2',b'0002')
#以队列读取结点数据
def getData():
children = zk.get_children('/test_zq')#获取结点下的全部子结点,函数返回值是一个列表,每个子结点的相对路径
list_queue= sorted(children) #取的是目录名称,并将这些名称进行排序
child = list_queue[0] #取队首元素
path = '/test_zq/' + child #将相对路径与父节点绝对路径组装得到子结点绝对路径
data,stat = zk.get(path) #获取子结点数据与状态
zk.delete(path,recursive=True) #删除队首元素
return data
print(getData())
print(getData())