【问题标题】:Storm: What happens with multiple workers?Storm:多个工人会发生什么?
【发布时间】:2016-09-06 11:17:30
【问题描述】:

假设我部署了一个有 2 个工作人员的拓扑,该拓扑有 1 个 spout 和 1 个 bolt,有 2 个任务。那么我的理解是,1个worker将运行spout executor和1个bolt executor,另一个worker将运行1个bolt executor。

我的理解正确吗?

如果我的理解是正确的,那么我的问题来了。假设螺栓是由 Python 实现的。由于storm通过stdout/stdin在多语言bolt之间传输数据,如果2个worker在不同的主机上运行,​​spout如何将数据发送到位于另一台主机上的bolt?

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    对您的问题稍作澄清。 Storm 使用各种类型的队列在拓扑的各个组件之间传输数据/元组

    例子:

    1) Storm 中的工作线程内通信(同一 Storm 节点上的线程间):LMAX Disruptor

    2) 工作人员间通信(跨网络的节点到节点):ZeroMQ 或 Netty

    3) 拓扑间通信:Storm 没有内置任何东西,你必须自己处理这个问题,例如Kafka/RabbitMQ等消息系统、数据库等。

    供进一步参考:

    http://www.michael-noll.com/blog/2013/06/21/understanding-storm-internal-message-buffers/

    【讨论】:

      【解决方案2】:

      给出更详细的答案:

      Storm 会将数据发送到两个螺栓执行器。对于 spout-local bolt,这发生在内存中;通过网络获取另一个螺栓。之后,每个bolt-instance 会将输入传递给本地运行的python 进程。因此,您描述的标准输出/标准输入交付发生在每台机器上本地。在数据从 Java 传输到 Python 之前,数据会传输到每个 Bolt。

      因此,stdout/stdin 桥用于每个螺栓中,而不是从喷嘴到螺栓。

      【讨论】:

        【解决方案3】:

        我自己做了一个测试。 Storm 可以正确地将 spout 发出的数据传递到不同主机上的 bolts。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-13
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多