Storm群集无法在生产模式下工作

时间:2014-07-23 15:58:24

标签: sockets proxy apache-storm

我有两个节点的风暴拓扑。一个是灵气,另一个是主管。

不属于storm的代理接受来自客户端的HTTP请求并将其传递给风暴拓扑。

拓扑结构如下: 1.代理将数据传递给风暴喷口。 2.喷口将数据传递给多个螺栓。 3.结果通过最后一个螺栓传回给代理。

我正在运行代理并将数据传递给storm。我能够在拓扑方面将套接字连接到侦听器。在UI中,喷口发出的数据显示为0。相同的拓扑在本地模式下工作正常。

认为这是主管的问题,但是主管似乎运行正常,因为我能够看到主管描述和各个喷口和螺栓。但它们都没有发射任何东西。

现在,如果问题是数据传递到错误的机器或其他什么,我很困惑。为了与spout通信,我从代理创建套接字如下:

            InetAddress stormInetAddr=InetAddress.getByName("198.18.17.16");
            int stormPort=4321;                 
            Socket stormSocket=new Socket(stormInetAddr,stormPort);

这里198.18.17.16是nimbus IP。 4321是预期数据的端口。

我尝试在这里提供主管IP,但没有连接。但是,这样做。 现在,代理会等待特定端口的输出。

另一方面,在处理之后,从螺栓读取数据。并且集群似乎没有任何活动。但是,我得到的回复基本上与我发送的一些混乱数据的请求相同。这个响应应该由最后一个螺栓发送到我定义的特定端口。然后我重新获取数据,但群集显示没有活动。我知道这很模糊,但是,有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:1)

听起来Storm工作正常,但您的代理/网络设置却没有。如果是风暴错误,您应该在Nimbus UI和/或Storm监控程序日志中看到异常。

考虑暂时关闭风暴并在管理员计算机上使用nc -l 4321来断言您的代理正在按预期工作。

<强>然而...

您的模型可能存在根本缺陷。 Storm的鲸鱼喷水是基于拉动的,因此将传入的请求推送给他们似乎很奇怪。当然,如果你的喷口在旋转时开始监听并简单地对请求进行排队,那么这是可能的。但是,这对您的模型提出了另一个挑战:您可能在一台计算机上运行多个喷口,并且它们不能共享同一个端口(4321)。

如果你想融合这两个推动世界的世界。拉;然后考虑使用Kafka Spout。