在 Storm 中配置并行性

Configuring parallelism in Storm

我是 Apache Storm 的新手,我正在尝试自己弄清楚如何配置风暴并行性。所以有一篇很棒的文章“Understanding the Parallelism of a Storm Topology”,但它只会引起质疑。

当你有一个多节点风暴集群时,每个拓扑根据 TOPOLOGY_WORKERS 配置参数作为一个整体分布。所以如果你有 5 个工人,那么你有 5 个 spout 副本(每个工人 1 个),螺栓也是一样。

如何在风暴集群中处理这种情况(最好不创建外部服务):

  1. 我只需要一个 spout 供所有拓扑实例使用,例如,如果输入数据通过网络文件夹推送到集群,并扫描新文件。
  2. 混凝土类型的螺栓存在类似问题。例如,当数据由锁定到具体物理机器的许可第三方库处理时。

首先,基础知识:

  1. Workers - 运行 个执行者,每个 worker 都有自己的 JVM
  2. Executors - 运行个任务,每个executor按storm分布在不同的worker
  3. 任务 - 实例 运行使用您的 spout/bolt 代码

其次,更正...拥有 5 个工人并不意味着您将自动拥有 5 个 spout 副本。拥有 5 个工作人员意味着您有 5 个独立的 JVM,storm 可以在其中将执行程序分配给 运行(将其视为 5 个存储桶)。

您的 spout 实例数是在您首次创建和提交拓扑时配置的:

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("0-spout", new MySpout(), spoutParallelism).setNumTasks(spoutTasks);

由于整个集群只需要一个 spout,因此可以将 spoutParallelismspoutTasks 都设置为 1。