【问题标题】:Can twitter storm worker get only parts of the topology?twitterstorm worker 可以只获取拓扑的一部分吗?
【发布时间】:2014-02-02 11:27:41
【问题描述】:

假设你有以下拓扑

喷口

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 中获取任何元组?
  • worker 1 的 bolt 2 会从 bolt 1 获取任何数据吗?
  • 我们是否必须保持工人数量与喷口/螺栓之间的比例,以便每个工人至少获得一个喷口/或螺栓?

【问题讨论】:

    标签: twitter apache-storm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 抱歉,我相信给定的 Worker(或进程)可以包含任意数量的螺栓/喷嘴的任务。我现在正在运行一个拓扑,其中有一个工作人员、一个 DRPC 喷口和 4 个螺栓,每个螺栓都有一些任务。据我了解,给定的任务(或线程)将只执行一个 Spout/Bolt。
      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多