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