Zookeeper不断收到警告:“流结束异常捕获”

Bas*_*ind 5 flume apache-zookeeper

我现在使用的CDH-5.3.1集群中的三个Zookeeper实例位于三个ip中:

133.0.127.40 n1
133.0.127.42 n2
133.0.127.44 n3
Run Code Online (Sandbox Code Playgroud)

启动时一切正常,但是这些天我注意到节点n2不断收到警告:

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)
Run Code Online (Sandbox Code Playgroud)

它每秒发生一次,并且仅在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.
Run Code Online (Sandbox Code Playgroud)

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

有人知道出什么事了吗?提前致谢。

Aeh*_*ham 4

我记得在 ZK 中看到过类似的错误(诚然,Flume 中没有)。我认为当时的问题与节点上存储和/或传输到客户端的大量数据有关。在 Zoo.cfg 中需要考虑调整的事项:

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

如果 ZK 客户端(Flume?)将大型 znode 传输到 ZK 集群或从 ZK 集群传输,您可能需要将jute.maxbuffer客户端 JVM(也可能是服务器节点)上的 Java 系统属性设置为足够大的值。我相信该属性的默认值为 1M。恐怕确定适合您的工作负载的值需要反复试验!