在 Curator 的重试尝试中处理来自 ZooKeeper 的 EndOfStreamException?
Deal with EndOfStreamException from ZooKeeper while Curator's retry attempt?
我正在使用 Apache Curator 框架创建一个由 ZK 管理的集群。
当集群中的某个节点突然失去与 ZK 的连接时,它会尝试每 5 秒重新连接一次。为此,我在指定时间使用 RetryForever
政策。
虽然 sessionTimeout
/connectionTimeouts
尚未完全过去,但我们仍在尝试重新连接。
但即使我们在这段时间内提升了 ZK 并获得了与它的连接,我们仍然会在日志中收到奇怪的消息:
Thu Nov 30 20:47:51.574 GMT 2017| INFO | org.apache.zookeeper.ClientCnxn$SendThread | Socket connection established to zk_1.default/138.122.177.23:2181, initiating session |Client Details{sessionTag:{}}| localhost-startStop-1-SendThread(zk_1.default:2181)
Thu Nov 30 20:47:51.592 GMT 2017| INFO |
org.apache.zookeeper.ClientCnxn$SendThread | Unable to read additional
data from server sessionid 0x1600ea13dcd0000, likely server has closed
socket, closing socket connection and attempting reconnect |Client
Details{sessionTag:{}}|
localhost-startStop-1-SendThread(zk_1.default:2181)
为什么我们仍然收到这些消息,并且无法完全连接到新创建的 ZK 节点?
稍后我发现this error意味着ZK已经用完了它的maxClientCnxns
(到ZK的最大连接数)参数,但我还没有找到如何使用 Curator 配置它...仅在测试中...
在 ZK 服务器端,我看到以下错误:
2017-12-04 15:48:29,972 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /192.168.107.4:37130
2017-12-04 15:48:29,974 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@915] - Refusing session request for client /138.122.177.23:37130 as it has seen zxid 0xd our last zxid is 0x0 client must try another server
这意味着客户端正在与 ZK 服务器对话并且最后看到交易
ID 0x11be4(或十进制的 72676)。它尝试访问的当前服务器
连接当前具有事务 ID 0x3f82(或十进制的 16258)
是(很多)低。假设客户端看到的数据比
服务器可以提供什么,可能会导致冲突
信息。它没有给客户坏的(过时的)信息,而是拒绝
假设客户端将重新连接到的连接
仲裁中具有更多最新数据的另一台服务器,或者当前
过时的服务器最终会收到来自另一个法定人数的快照
会员赶上。
我正在使用 Apache Curator 框架创建一个由 ZK 管理的集群。
当集群中的某个节点突然失去与 ZK 的连接时,它会尝试每 5 秒重新连接一次。为此,我在指定时间使用 RetryForever
政策。
虽然 sessionTimeout
/connectionTimeouts
尚未完全过去,但我们仍在尝试重新连接。
但即使我们在这段时间内提升了 ZK 并获得了与它的连接,我们仍然会在日志中收到奇怪的消息:
Thu Nov 30 20:47:51.574 GMT 2017| INFO | org.apache.zookeeper.ClientCnxn$SendThread | Socket connection established to zk_1.default/138.122.177.23:2181, initiating session |Client Details{sessionTag:{}}| localhost-startStop-1-SendThread(zk_1.default:2181)
Thu Nov 30 20:47:51.592 GMT 2017| INFO |
org.apache.zookeeper.ClientCnxn$SendThread | Unable to read additional
data from server sessionid 0x1600ea13dcd0000, likely server has closed
socket, closing socket connection and attempting reconnect |Client
Details{sessionTag:{}}|
localhost-startStop-1-SendThread(zk_1.default:2181)
为什么我们仍然收到这些消息,并且无法完全连接到新创建的 ZK 节点?
稍后我发现this error意味着ZK已经用完了它的
maxClientCnxns
(到ZK的最大连接数)参数,但我还没有找到如何使用 Curator 配置它...仅在测试中...在 ZK 服务器端,我看到以下错误:
2017-12-04 15:48:29,972 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /192.168.107.4:37130 2017-12-04 15:48:29,974 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@915] - Refusing session request for client /138.122.177.23:37130 as it has seen zxid 0xd our last zxid is 0x0 client must try another server
这意味着客户端正在与 ZK 服务器对话并且最后看到交易 ID 0x11be4(或十进制的 72676)。它尝试访问的当前服务器 连接当前具有事务 ID 0x3f82(或十进制的 16258) 是(很多)低。假设客户端看到的数据比 服务器可以提供什么,可能会导致冲突 信息。它没有给客户坏的(过时的)信息,而是拒绝 假设客户端将重新连接到的连接 仲裁中具有更多最新数据的另一台服务器,或者当前 过时的服务器最终会收到来自另一个法定人数的快照 会员赶上。