Fork me on GitHub

Zookeeper笔记之quota

一、节点配额概述

zookeeper中可以往节点存放数据,但是一般来说存放数据总是要有个度量的对吧,不然空间就那么大,如果某个节点将空间全占用了其它节点没得用了,所以zookeeper提供了一个对节点配额功能,不过这个配额功能有点鸡肋,当占用的空间超过了设置的大小时只会打印WARN级别的日志提醒而不是直接让超出配额的操作失败。既然只是在日志中打印一个警告信息,首先就是要找到日志的位置,默认情况下,日志的位置在$ZOOKEEPER/bin/zkEnv.sh中设置:

image

可以看到,如果不设置默认会将日志输出在zkEnv.sh脚本所在的目录,即将日志输出到$ZOOKEEPER/bin/zookeeper.out文件中。

 

配额类型

配额分为两种,一种是对子节点数量的限制,称之为count限制,一种是对节点能够存放的数据大小的限制,称之为byte限制。

 

配额信息的保存位置

zookeeper的配额信息是存储在/zookeeper/quota路径下的,可以打开看一下:

image

查看更详细的信息:

image

zookeeper_limits是对此节点施加的限制,即最大能够是多少:

image

zookeeper_stats是节点的当前状态,即当前已经用了多少:

image

配额可以通过zkCli.sh命令行工具进行相关设置,下面将相关的几个命令进行详细介绍。

 

二、quota相关命令

setquota -n|-b val path

用来设置某个节点的子节点个数和其本身的数据长度。

-n 限制此节点最大可拥有多少个子节点

-b 限制此节点能够存储的数据最大是多少个字节

 

-n 选项有点不太好理解,因为在树形结构中的限制子节点数量一般分为有两种情况:

1. 只算直接孩子节点的数量,孩子节点的子节点就不再算数

2. 只要是挂在这个节点下的节点都算数,是递归计算

 

那么这里的-n是指的哪种情况呢?来做一个小小的实验验证一下。

创建一个节点/foo,为其配额子节点数为3,然后在下面创建几个孩子节点:

image 

然后查看日志:

image 

这条日志是在创建/foo/c的时候打印的,但是仔细一算好像不太对哦,/foo/a、/foo/b、/foo/c这才三个节点啊,并没有超出限制为什么count显示4呢?这是因为当前节点本身还占用了一个计数。

 

-b选项和-n选项差不多:

image 

创建/foo/a时打印了警告日志:

image 

 

listquota path

显示指定路径下已经设置的配置

image 

 

delquota [-n|-b] path

用于删除已经创建的quota:

image 

需要注意的是删除节点时并不会自动删除绑定在特定路径上的quota,需要手动删除。

image

 

三、总结

1. zookeeper的quota并没有实际的限制作用,超出了也只是打印WARN级别日志。

2. quota有子节点数量和字节大小限制两种。

3. quota是以前缀匹配路径,作用在指定路径路径及其子路径上。

 

.

posted @ 2018-11-16 21:42  CC11001100  阅读(3165)  评论(0编辑  收藏  举报