twitter风暴工作者可以只获得拓扑的一部分吗?

时间:2014-01-31 13:04:27

标签: twitter apache-storm

假设您具有以下拓扑

喷口

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 个答案:

答案 0 :(得分:2)

您需要区分不同任务在工作人员之间的分配方式以及您的喷口和螺栓之间的分组。分组决定元组在拓扑中的路由方式。例如,如果你使用spout和bolt1之间的所有分组,bolt1中的每个任务都将接收由spout发送的每个元组。 Storm有许多不同的分组,我建议你仔细阅读风暴概念页面,这应该回答你的问题:https://github.com/nathanmarz/storm/wiki/Concepts

答案 1 :(得分:2)

简而言之,您无需担心哪个工作人员正在处理特定任务。 Storm负责路由消息,因此您无需关注它。在这种情况下,一切都将按预期工作:spout会将元组发送给bolt1 worker,而botl1 worker会将元组发送给bolt2 worker,无论它们位于集群中的哪个位置。

那就是说,你对工人之间的任务分配有些不正确。工人一次只能包含一个螺栓或喷口的任务。但是,主管可能正在运行多个工作人员,在这种情况下,您将在同一硬件上运行不同螺栓或喷口的多个任务,但不能在同一个过程中运行。