apache-zookeeper – Zookeeper不断获取WARN:“捕获了流末尾异常”

我现在使用的CDH-5.3.1集群有三个位于三个ips中的zookeeper实例:

133.0.127.40 n1
133.0.127.42 n2
133.0.127.44 n3

它开始时一切正常,但是现在我注意到节点n2不断得到WARN:

caught end of stream exception

EndOfStreamException: Unable to read additional data from client sessionid **0x0**, likely client has closed socket
    at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:220)
    at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:208)
    at java.lang.Thread.run(Thread.java:722)

它每秒发生一次,只在n2上发生,而n1和n3都很好.
我仍然可以使用HBase shell来扫描我的表,并使用Solr WEB UI来查询.但我无法启动Flume代理,此过程全部停止在此步骤:

Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog

jetty-6.1.26.cloudera.4

Started SelectChannelConnector@0.0.0.0:41414.

几分钟后,我收到Cloudera Manager的警告,Flume代理超过了文件描述符的阈值.

有谁知道出了什么问题?提前致谢.

最佳答案 我记得在ZK中看到类似的错误(诚然不在Flume中).我认为当时的问题是存储在节点上和/或传输到客户端的大量数据.要考虑在zoo.cfg中调整的事情:

>对autopurge.snapRetainCount施加限制,例如将它设置为10
>将autopurge.purgeInterval设置为2(小时)

如果ZK客户端(Flume?)正在向ZK集群传输大型znode,您可能希望在客户端JVM上设置Java系统属性jute.maxbuffer,并且可能在服务器节点上设置足够大的zute.值.我相信这个属性的默认值是1M.确定适合您的工作负载的价值是一种试验和错误,我担心!

点赞