我有一个风暴拓扑,它有两个节点。一个是光环,另一个是主管。
不属于storm的代理接受来自客户端的http请求并将其传递给storm拓扑。
拓扑结构如下:1。代理将数据传递到风暴喷口。2.喷口将数据传递给多个螺栓。3.最后一个螺栓将结果传回代理。
我正在运行代理并将数据传递给storm。我能够在拓扑端将套接字连接到侦听器。喷口发出的数据在ui中显示为0。在本地模式下,相同的拓扑可以正常工作。
我认为这是主管的问题,但主管似乎运行良好,因为我能够看到主管的描述和个别喷口和螺栓。但没有一个能发出任何东西。
现在,我不知道问题是数据传递到错误的机器还是什么。为了与喷口通信,我从代理创建了套接字,如下所示:
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条答案
按热度按时间wkyowqbh1#
听起来storm工作正常,但您的代理/网络设置不正常。如果是storm错误,您应该在nimbus ui和/或storm supervisor日志中看到异常。
考虑暂时关闭storm并使用
nc -l 4321
在主管计算机上声明您的代理按预期工作。然而。。。
你的模型可能有一个根本的缺陷。storm的喷口是基于拉的,所以将传入的请求推送到它们似乎很奇怪。这是可能的,当然,如果你有你的嘴开始听时,他们旋转起来,只是排队的请求。然而,这对您的模型提出了另一个挑战:您可能有多个喷口在一台机器上运行,它们不能共享同一个端口(4321)。
如果你想融合这两个世界的推拉;然后考虑使用Kafka喷口。