多个工人怎么办?

pxyaymoc  于 2021-06-21  发布在  Storm
关注(0)|答案(3)|浏览(332)

假设我部署一个有两个工人的拓扑,拓扑有一个喷口和一个螺栓,有两个任务。那么我的理解是,一个工人将运行喷口执行器和一个螺栓执行器,另一个工人将运行一个螺栓执行器。
我的理解正确吗?
如果我的理解是正确的,那么我的问题就来了。假设螺栓是由python实现的。由于storm通过stdout/stdin在多个lang bolt之间传输数据,如果两个worker在不同的主机上运行,那么spout如何将数据发送到另一个主机上的bolt?

cgh8pdjw

cgh8pdjw1#

要给出更详细的答案:
storm将把数据发送给两个执行者。对于喷口局部螺栓,这发生在内存中;另一个螺栓通过网络。之后,每个bolt示例将把输入传递给本地运行的python进程。因此,您描述的stdout/stdin传递在每台机器上本地进行。在从java到python的数据传递之前,数据被传输到每个bolt。
因此,stdout/stdin桥用于每个螺栓内,而不是从喷嘴到螺栓。

piztneat

piztneat2#

对你的问题再澄清一点。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/

8hhllhi2

8hhllhi23#

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

相关问题