Storm 支持任务并行还是数据并行?

Storm supports task or data parallelism?

我正在尝试学习 Storm 提供的并行性和可伸缩性功能,并阅读了以下文章 http://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html。我很困惑 Storm 是否支持数据或任务并行性。我能理解的(我可能是错的)是 Storm 支持任务并行(因为并行度受拓扑中任务数量的限制)。如果是这种情况,那么它如何用于需要数据并行性的大规模并行数据处理。

如有任何帮助,我们将不胜感激。谢谢:)

Storm 不遵循教科书术语。事实上,Storm 确实支持数据、任务和流水线并行。

如果你有一个运算符并分配一个大于 1 (parallelism_hint) 的并行度,你将获得与参数指定的一样多的线程,每个线程在不同的数据上执行相同的代码,即你得到 数据并行。您可以进一步分配参数 number_of_tasks(必须是 >= parallelism_hint)以将输入数据拆分为 number_of_task partitions/substreams(即比执行器更多的分区)。因此,一些执行线程需要处理多个partitions/substreams(在Storm中称为任务)。这不会增加并行性(可能是并发性)。但是,它允许在 运行 时间更改执行者的数量。

由于您的拓扑中有多个 spout 和 bolts,并且所有这些 spout 和 bolt 都在不同的线程甚至不同的机器中执行,因此您在此处具有 任务并行性不要与 Storm 对术语任务的使用混淆!)。由于 spouts/bolts 之间存在 produce/consumer 关系,您还可以得到 管道并行性 她的,这是任务并行性的一种特殊形式。 Storm 中的另一种任务并行形式是能够同时 运行 多个拓扑。