jute.maxbuffer 仅影响传入流量

jute.maxbuffer affects only incoming traffic

这个值是否只影响传入流量?如果我在 zookeeper 服务器和 zookeeper 客户端上将此值设置为 4MB,然后启动我的客户端,当我请求路径 /abc/asyncMultiMap/subs 时,我是否仍会获得 > 4MB 的数据。如果 /subs 有大于 4MB 的数据,服务器是否会将其分成 <= 4MB 的块并将其分段发送给客户端?

我在客户端(通过 vertx-zookeeper)和服务器上都使用 zookeeper 3.4.6。我在客户端上看到错误,抱怨数据包长度大于 4MB。

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]

响应中没有分块。

这是服务器端设置。如果整个响应大于 jute.maxbuffer 设置,您将收到此错误。此响应限制也包括 znode 的子节点列表,因此即使 subs 没有很多数据但有足够的子节点,以至于它们的路径长度超过最大缓冲区大小,您也会收到错误。

“这是 server-side 设置” 此声明不正确,jute.maxbuffer 也在客户端上通过 Record 实现 类 进行评估,该 类 接收 InputArchive。每次读取一个字段并将其存储到 InputArchive 时,都会根据 jute.maxbuffer 检查该值。例如ClientCnxnSocket.readConnectResult

我在ZK 3.4中调查过