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

问题描述 投票:0回答:1

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

不属于Storm的代理从客户端接受HTTP请求,并将其传递到Storm拓扑。

拓扑如下所示:1.代理将数据传递到风暴喷口。 2.喷嘴将数据传递到多个螺栓。 3.结果由最后一个螺栓传递回代理。

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

认为这是主管的问题,但主管似乎运行良好,因为我能够看到主管的说明以及各个喷嘴和螺栓。 但是它们都没有发出任何东西。

现在,我很困惑,如果问题出在将数据传递到错误的机器或其他东西上。 为了与喷口进行通信,Im从代理创建套接字,如下所示:

            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,但它没有连接。 但是,确实如此。 现在,代理在特定端口上等待输出。

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

sockets proxy apache-storm
1个回答
1
投票

听起来Storm可以正常工作,但您的代理/网络设置却不行。 如果是风暴错误,则应该在Nimbus UI和/或风暴管理器日志中看到异常。

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

然而...

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

如果您想融合推拉的两个世界, 然后考虑使用Kafka壶嘴。

© www.soinside.com 2019 - 2024. All rights reserved.