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是之前綴匹配路徑,做用在指定路徑路徑及其子路徑上。
.