我使用ZooKeeper来存储分层数据。在一次测试中,我在一个节点下存储了超过300K的孩子。当我试图检索所有孩子时,ZK客户端由于ConnectionLossException而崩溃。
重新构建数据可能会解决问题(例如通过分组,因为它减少了每个节点的子节点数)。
但我很想知道以下问题的答案:
谢谢!
答案 0 :(得分:2)
就在一天前,Zookeeper 3.4.4 版存在一个问题,其中将近 80 万个节点最终位于单个父节点下,并在尝试访问该父节点时导致问题。尝试了几种不同的删除节点的方法,但都没有奏效。全部命中 ConnectionLoss KeeperExceptions。
当使用通过 3.4.14 java 客户端(不是 3.4.4 java 客户端)使用 -Djute.maxbuffer
的 java8 程序运行时,ZKUtil.deleteRecursive( zk, path );
java 选项用于删除 800K 子节点 znode。这个 jopt 不必放在服务器端。这是一个纯粹客户端变化。但是不能与 3.4.14 zkCli 命令行客户端一起使用。
答案 1 :(得分:1)
通过动物园管理员的资料,孩子人数没有明确限制。但是childCount
是int
类型,最大值应该是Integer#MAX_VALUE
。
答案 2 :(得分:0)
孩子的数量没有明确的限制。
但是,有一个
限制可以从服务器发回的数据包的大小
对getChildren
的响应实际上是极限。这是
由系统属性jute.maxbuffer
控制,默认为4MB(
认为您可以在其中获得约200,000个znode,尽管这还取决于
在znode名称的长度上)。
查看this link进行完整的讨论。