【问题标题】:Storm cluster not working in Production modeStorm 集群无法在生产模式下工作
【发布时间】:2014-07-23 15:58:23
【问题描述】:

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

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

拓扑是这样的: 1. 代理将数据传递给 Storm Spout。 2. spout 将数据传递给多个 bolt。 3. 最后一个bolt将结果传回proxy。

我正在运行代理并将数据传递给storm。我能够将套接字连接到拓扑端的侦听器。 spout 发出的数据在 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,但它没有连接。 但是,它确实如此。 现在代理等待特定端口上的输出。

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

【问题讨论】:

    标签: sockets proxy apache-storm


    【解决方案1】:

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

    考虑暂时关闭storm并在主管机器上使用nc -l 4321来断言您的代理正在按预期工作。

    但是...

    您的模型可能存在根本缺陷。 Storm 的 spout 是基于拉取的,因此将传入的请求推送给它们似乎很奇怪。当然,如果您的 spout 在启动时开始侦听并简单地将请求排队,这是可能的。但是,这对您的模型提出了另一个挑战:您可能会在一台机器上运行多个 spout,并且它们不能共享同一个端口 (4321)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2018-07-12
      • 1970-01-01
      • 2011-11-13
      • 2020-09-18
      • 2021-09-01
      • 2023-03-26
      相关资源
      最近更新 更多