这个值只影响传入流量吗?如果我在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]
2条答案
按热度按时间j5fpnvbx1#
“这是服务器端设置”此语句不正确,jute.maxbuffer在客户端上也由接收InputArchive的Record实现类计算。每次读取字段并将其存储到InputArchive中时,都会根据jute.maxbuffer检查该值。例如ClientCnxnSocket.readConnectResult
我在ZK3.4中研究过
w8ntj3qf2#
响应中没有分块。
这是服务器端的设定。如果整个回应大于
jute.maxbuffer
的设定,就会发生这个错误。这个回应限制也包括znode的子节点清单,所以即使subs
没有太多的数据,但有足够的子节点,使得它们的路径长度超过最大缓冲区大小,也会发生这个错误。