由于Netty-Client主机名解析

时间:2016-04-14 02:01:17

标签: elasticsearch amazon-ec2 apache-kafka apache-storm

我实际上正在研究从kafka获取数据的拓扑,并将它们保存到elasticsearch中。好吧,首先,我使用来自风暴依赖的基本KafkaSpout来监听来自精确kafka主题的数据,并且我从elasticsearch-hadoop项目重新实现了Elasticsearch bolt:https://github.com/elastic/elasticsearch-hadoop/blob/master/storm/src/main/java/org/elasticsearch/storm/EsBolt.java。目标是在elasticsearch上写几个索引。 因此,当我处理来自kafka的消息时,当kafka队列中的数据数量增长时,我有一些例外。这是工作日志中堆栈跟踪的一部分:

2016-04-13T22:24:44.641+0000 b.s.m.n.Client [ERROR] failed to send 580 messages to Netty-Client-ip-[internal-ip].ec2.internal/[internal-ip]:6700: 
java.nio.channels.ClosedChannelException
2016-04-13T22:24:44.641+0000 b.s.m.n.Client [ERROR] failed to send 575 messages to Netty-Client-ip-[internal-ip].ec2.internal/[internal-ip]:6700:
java.nio.channels.ClosedChannelException
2016-04-13T22:25:05.970+0000 b.s.m.n.Client [WARN] Re-connection to ip-[internal-ip].ec2.internal/[internal-ip]:6701 was successful but 52890 messages
has been lost so far
2016-04-13T22:36:33.571+0000 b.s.m.n.StormClientHandler [INFO] Connection failed Netty-Client-ip-ip-[internal-ip].ec2.internal/[internal-ip]:6701
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.8.0_77]
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[na:1.8.0_77]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.8.0_77]
at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[na:1.8.0_77]
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) ~[na:1.8.0_77]
at org.apache.storm.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [storm-core-0.9.6.jar:0.9.6]
at org.apache.storm.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [storm-core-0.9.6.jar:0.9.6]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_77]

我使用3个节点的风暴群集(1个nimbus + UI + Zookeeper和2个主管)。风暴版0.9.6。这些机器中的每一台都有4GB RAM,这是我的storm.yml配置文件的内容:

storm.zookeeper.servers:
  - "nimbus-ip"
storm.local.dir: "/mnt/storm"
nimbus.seeds: ["nimbus-ip"]
storm.zookeeper.port: 2181
ui.port: 8080
nimbus.host: "nimbus-ip"
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703
storm.messaging.netty.max_wait_ms: 10000

任何人都可以帮助我了解为什么工作人员可以通过Netty-Client主机名解析进行通信?我已经在风暴https://issues.apache.org/jira/browse/STORM-908的0.9.4版本中看到了这个问题的一个报告。 0.9.6版本是否可能无法解决此问题?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

我从谷歌到这里寻找类似问题的答案。就我而言,错误是:

o.a.s.m.n.Client [ERROR] connection attempt 104 to Netty-Client-ip-XXX-XXX-XXX-XXX.ec2.internal/XXX.XXX.XXX.XXX:6703 failed: java.net.ConnectException: Connection refused: ip-XXX-XXX-XXX-XXX.ec2.internal/XXX.XXX.XXX.XXX:6703

这出现在2节点风暴群集(v1.0.1)上。

起初,我认为这是AWS的一个网络问题(这是我部署节点的地方)。我开始查看安全组规则,/ etc / hosts文件等,但没有一个帮助。

经过一番搜索后,我发现了这个:https://issues.apache.org/jira/browse/STORM-1382并认为可能问题根本不是网络,而是另一端没有运行。

所以,我ssh -d进入一个工作节点并查看了主管日志,它向我展示了这样的批次和批次:

o.a.s.d.supervisor [INFO] 30236e62-d2e1-4d5c-b75c-f54ef07653a4 still hasn't started

当我查看worker.log本身时,我发现默认的java版本存在问题。那是我的问题,但其他人的问题可能与工人失败的其他原因有关。

无论如何,一旦我设置了正确的默认java版本,它就全都开始了。