我在一个5节点集群中安装了storm-0.9.2。我有一个简单的拓扑结构,有一个喷口和不同数量的螺栓(4、9、22、31)。对于每种配置,我都配置了(#个螺栓+1个)工人。因此,对于4个螺栓,我有5个工人,22个螺栓有23个工人,等等
我在工作日志文件中观察到失败的工作进程,在zookkeeper.out日志文件中发现了相应的EndOfStream异常。当我得到一个干净的测试运行时,每个螺栓处理的元组数量均匀地分布在每个工人身上。在非干净测试运行中,失败的工作程序会尝试重新连接,但是由于元组的数量有限,因此没有更多的元组需要处理。
工人流程死亡的可能原因是什么?
zookeeper.out日志文件摘录:
*2014-10-27 17:40:33,198 [myid:] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@357] - caught end of stream exception
EndOfStreamException: Unable to read additional data from client sessionid 0x1495431347c001e, likely client has closed socket
at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:228)
at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:208)
at java.lang.Thread.run(Thread.java:744)
2014-10-27 17:40:33,201 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1007] - Closed socket connection for client /192.168.0.1:45693 which had sessionid 0x1495431347c001e*
集群环境:
- 风暴0.9.2
- 动物园管理员3.4.6
- Ubuntu 13.10
对我来说,这似乎是Zookeeper的问题。有几个想法:
- 你的动物园管理员超时配置太小
- 您的Zookeeper实例没有足够的子级(奴隶)来处理您的工作负载
为了进行诊断,首先要增加Zookeeper实例的默认超时时间。如果不起作用,请尝试扩展Zookeeper集群。
您可以合并Zookeeper文档。如果这能解决你的问题,请告诉我们。