Zookeeper笔记之quota
一、节点配额概述
zookeeper中可以往节点存放数据,但是一般来说存放数据总是要有个度量的对吧,不然空间就那么大,如果某个节点将空间全占用了其它节点没得用了,所以zookeeper提供了一个对节点配额功能,不过这个配额功能有点鸡肋,当占用的空间超过了设置的大小时只会打印WARN级别的日志提醒而不是直接让超出配额的操作失败。既然只是在日志中打印一个警告信息,首先就是要找到日志的位置,默认情况下,日志的位置在$ZOOKEEPER/bin/zkEnv.sh中设置:
可以看到,如果不设置默认会将日志输出在zkEnv.sh脚本所在的目录,即将日志输出到$ZOOKEEPER/bin/zookeeper.out文件中。
配额类型
配额分为两种,一种是对子节点数量的限制,称之为count限制,一种是对节点能够存放的数据大小的限制,称之为byte限制。
配额信息的保存位置
zookeeper的配额信息是存储在/zookeeper/quota路径下的,可以打开看一下:
查看更详细的信息:
zookeeper_limits是对此节点施加的限制,即最大能够是多少:
zookeeper_stats是节点的当前状态,即当前已经用了多少:
配额可以通过zkCli.sh命令行工具进行相关设置,下面将相关的几个命令进行详细介绍。
二、quota相关命令
setquota -n|-b val path
用来设置某个节点的子节点个数和其本身的数据长度。
-n 限制此节点最大可拥有多少个子节点
-b 限制此节点能够存储的数据最大是多少个字节
-n 选项有点不太好理解,因为在树形结构中的限制子节点数量一般分为有两种情况:
1. 只算直接孩子节点的数量,孩子节点的子节点就不再算数
2. 只要是挂在这个节点下的节点都算数,是递归计算
那么这里的-n是指的哪种情况呢?来做一个小小的实验验证一下。
创建一个节点/foo,为其配额子节点数为3,然后在下面创建几个孩子节点:
然后查看日志:
这条日志是在创建/foo/c的时候打印的,但是仔细一算好像不太对哦,/foo/a、/foo/b、/foo/c这才三个节点啊,并没有超出限制为什么count显示4呢?这是因为当前节点本身还占用了一个计数。
-b选项和-n选项差不多:
创建/foo/a时打印了警告日志:
listquota path
显示指定路径下已经设置的配置
delquota [-n|-b] path
用于删除已经创建的quota:
需要注意的是删除节点时并不会自动删除绑定在特定路径上的quota,需要手动删除。
三、总结
1. zookeeper的quota并没有实际的限制作用,超出了也只是打印WARN级别日志。
2. quota有子节点数量和字节大小限制两种。
3. quota是以前缀匹配路径,作用在指定路径路径及其子路径上。
.