策展人的重试尝试时,从ZooKeeper处理EndOfStreamException?

Dev*_*r87 5 apache solr cluster-computing apache-curator

我正在使用Apache Curator框架来创建由ZK管理的集群.

当群集中的某个节点突然失去与ZK的连接时,它会尝试每5秒重新连接一次.我正在使用RetryForever具有指定时间的策略.

虽然sessionTimeout/connectionTimeout没有完全消失,但我们仍在尝试重新连接.

但即使我们在这段时间内提出了ZK并获得了与它的连接,我们仍然在日志中收到奇怪的消息:

11月30日星期四20:47:51.574 GMT 2017 | 信息| org.apache.zookeeper.ClientCnxn $ SendThread | 建立到zk_1.default/138.122.177.23:2181的套接字连接,启动会话|客户端详细信息{sessionTag:{}} | 本地主机 - startStop -1- SendThread(zk_1.default:2181)

11月30日星期四20:47:51.592 GMT 2017 | 信息| org.apache.zookeeper.ClientCnxn $ SendThread | 无法从服务器sessionid 0x1600ea13dcd0000读取其他数据,可能服务器已关闭套接字,关闭套接字连接并尝试重新连接|客户端详细信息{sessionTag:{}} | 本地主机 - startStop -1- SendThread(zk_1.default:2181)

为什么我们仍然收到这些消息,无法完全连接到新出现的ZK节点?

PS:

1)一点点后来我发现,这个错误意味着ZK已用完maxClientCnxns(以ZK)参数最大连接数,但我还没有找到如何使用馆长...只有在测试中,它的配置...

2)在ZK服务器端,我看到以下错误:

2017-12-04 15:48:29,972 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory @ 192] - 接受来自/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] - 拒绝客户端/138.122.177.23:37130的会话请求,因为它看到了zxid 0xd我们的最后zxid是0x0客户端必须尝试另一台服务器

Dev*_*r87 2

答案就在这里:http://grokbase.com/t/cloudera/cdh-user/134hrpr3nc/zookeeperserver-refusing-session-request-for-client-any-ideas

这意味着客户端正在与 ZK 服务器通信,并且最后看到的交易 ID 为 0x11be4(或十进制的 72676)。它尝试连接的当前服务器当前的事务 ID 为 0x3f82(或十进制的 16258),该 ID 低得多。假设客户端看到的数据比服务器可以提供的数据晚,可能会导致信息冲突。它不会向客户端提供错误(过时)信息,而是拒绝连接,并假设客户端将重新连接到仲裁中的另一台服务器并提供更多最新数据,或者当前过时的服务器最终将收到来自另一仲裁的快照会员赶上它。