Apache storm 斯托姆:多个工人怎么办?
假设我部署了一个包含2个工人的拓扑,拓扑有1个喷口和1个螺栓,有2个任务。那么我的理解是,一名工人将运行喷口执行器和一个螺栓执行器,另一名工人将运行一个螺栓执行器 我的理解正确吗Apache storm 斯托姆:多个工人怎么办?,apache-storm,Apache Storm,假设我部署了一个包含2个工人的拓扑,拓扑有1个喷口和1个螺栓,有2个任务。那么我的理解是,一名工人将运行喷口执行器和一个螺栓执行器,另一名工人将运行一个螺栓执行器 我的理解正确吗 如果我的理解是正确的,那么我的问题就来了。假设bolt是由Python实现的。由于storm通过stdout/stdin在多个lang螺栓之间传输数据,如果两个工人在不同的主机上运行,spout如何将数据发送到位于另一台主机上的螺栓?我自己做了一个测试。Storm可以将喷口排放的数据正确地传送到不同主机上的螺栓。要给出
如果我的理解是正确的,那么我的问题就来了。假设bolt是由Python实现的。由于storm通过stdout/stdin在多个lang螺栓之间传输数据,如果两个工人在不同的主机上运行,spout如何将数据发送到位于另一台主机上的螺栓?我自己做了一个测试。Storm可以将喷口排放的数据正确地传送到不同主机上的螺栓。要给出更详细的答案: Storm将向两个螺栓执行器发送数据。对于喷口局部螺栓,这发生在内存中;通过网络连接另一个螺栓。之后,每个bolt实例将把输入传递给本地运行的python进程。因此,您描述的stdout/stdin交付在每台机器上本地进行。在将数据从Java传递到Python之前,将数据传输到每个螺栓
因此,stdout/stdin桥在每个螺栓内使用,而不是从喷嘴到螺栓。对您的问题稍作澄清。Storm使用各种类型的队列在拓扑的各个组件之间进行数据/元组传输 例如: 1) Storm中的工作线程内通信(同一Storm节点上的线程间):LMAX中断器 2) 工作人员间通信(跨网络的节点到节点):ZeroMQ或Netty 3) 拓扑间通信:Storm中没有内置任何内容,您必须自己处理,例如使用Kafka/RabbitMQ等消息传递系统、数据库等 供进一步参考: