风暴:多个工人会怎么样?

时间:2016-05-11 07:41:17

标签: apache-storm

假设我部署了一个包含2名工作人员的拓扑,topo有1个spout,1个bolt有2个任务。然后我的理解是,1名工人将运行spout执行器和1个bolt执行器,另一名工作人员将运行1个bolt执行器。

我的理解是否正确?

如果我的理解是正确的,那么我的问题就出现了。说螺栓是由Python实现的。由于风暴通过stdout / stdin在多个螺栓之间传输数据,如果2个工作者在不同的主机上运行,​​那么spout如何将数据发送到位于另一个主机上的bolt?

3 个答案:

答案 0 :(得分:1)

提供更详细的答案:

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

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

答案 1 :(得分: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 :(得分:0)

我自己做了一个测试。 Storm可以正确地将喷出的数据发送到不同主机上的螺栓。