假设您有以下拓扑
喷口
spout (sends tuple to )bolt1
bolt1 (sends tuple to) bolt2
以及以下设置:
3名工艺工人
spout,parallel hint=1
bolt1, parallel hint=2
bolt2,parallel hint=3
我的问题是:
我在工人中的以下(可能)分配是否正确:
Worker1
spout1
bolt 2
Worker2
bolt 1
bolt 2
Worker3
bolt1
bolt 2
在上述条件下,bolt1(来自worker2,worker3)会从spout得到任何元组吗?
工人1的螺栓2是否会从螺栓1获得任何数据?
我们是否必须在工人数量和喷嘴/螺栓之间保持比例,以便每个工人至少获得一个喷嘴/螺栓?
2条答案
按热度按时间ekqde3dh1#
简言之,您不必担心哪个工人正在处理特定的任务。storm负责路由消息,这样您就不需要关注它了。在这种情况下,一切都将按预期工作:喷口将元组发送给bolt1 worker,botl1 worker将元组发送给bolt2 worker,而不管它们在集群中的物理位置如何。
也就是说,你对工人之间的任务分配有点不正确。一个工人一次只能包含一个螺栓或喷嘴的任务。不过,一个主管可能要运行多个工人,在这种情况下,您将有多个不同螺栓或喷嘴的任务在同一硬件上运行,但不在同一进程中。
w8biq8rn2#
你需要区分不同的任务是如何在你的工人之间分配的,以及你的管和螺栓之间的分组。分组决定元组在拓扑中的路由方式。例如,如果在spout1和bolt1之间使用all分组,bolt1中的每个任务都将接收spout1发送的每个元组。storm有许多不同的分组,我建议您仔细阅读storms概念页这应该回答您的问题:https://github.com/nathanmarz/storm/wiki/concepts.