Zookeeper jute.maxbuffer只影响传入的流量

41zrol4v  于 2022-12-09  发布在  Apache
关注(0)|答案(2)|浏览(325)

这个值只影响传入流量吗?如果我在zookeeper服务器和zookeeper客户端上设置这个值为4 MB,并且启动我的客户端,当我请求路径/abc/asyncMultiMap/subs时,我仍然会得到大于4 MB的数据吗?如果/subs有大于4 MB的数据,服务器是否会将其分成小于等于4 MB的数据块,然后将其发送到客户端?
我在客户端(通过vertx-zookeeper)和服务器上使用zookeeper 3.4.6。我在客户端上看到错误,它抱怨数据包长度大于4 MB。

java.io.IOException: Packet len4194374 is out of range!
    at org.apache.zookeeper.ClientCnxnSocket.readLength(ClientCnxnSocket.java:112) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
j5fpnvbx

j5fpnvbx1#

“这是服务器端设置”此语句不正确,jute.maxbuffer在客户端上也由接收InputArchive的Record实现类计算。每次读取字段并将其存储到InputArchive中时,都会根据jute.maxbuffer检查该值。例如ClientCnxnSocket.readConnectResult
我在ZK3.4中研究过

w8ntj3qf

w8ntj3qf2#

响应中没有分块。
这是服务器端的设定。如果整个回应大于jute.maxbuffer的设定,就会发生这个错误。这个回应限制也包括znode的子节点清单,所以即使subs没有太多的数据,但有足够的子节点,使得它们的路径长度超过最大缓冲区大小,也会发生这个错误。

相关问题