假设我部署了一个包含2名工作人员的拓扑,topo有1个spout,1个bolt有2个任务。然后我的理解是,1名工人将运行spout执行器和1个bolt执行器,另一名工作人员将运行1个bolt执行器。
我的理解是否正确?
如果我的理解是正确的,那么我的问题就出现了。说螺栓是由Python实现的。由于风暴通过stdout / stdin在多个螺栓之间传输数据,如果2个工作者在不同的主机上运行,那么spout如何将数据发送到位于另一个主机上的bolt?
答案 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可以正确地将喷出的数据发送到不同主机上的螺栓。