当前位置: 首页 > 知识库问答 >
问题:

是Apache Flink中的一个任务一个线程

韩羽
2023-03-14

我是Flink的新手。据我了解,在Flink中,一个TaskManager可以分成多个插槽,一个插槽可以分配多个任务,一个任务是一个线程。

让我们看看WordCount示例:

据我所知,一个任务就是一个线程,有三个任务:<代码>源映射() ,<代码>keyBy()/窗口()/应用() 和<代码>接收器 。所以每个都有自己的线程,这意味着我们需要三个线程来完成这个示例。我们可以将三个任务(三个线程)放入一个插槽中。

然而,现在我正在阅读它的官方文件:https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html

Flink程序由多个任务(转换/运算符、数据源和接收器)组成。一个任务被分成几个并行实例执行,每个并行实例处理任务输入数据的子集。任务的并行实例数称为其并行性。

如何理解“一个任务被拆分为多个并行执行实例”?“多个并行执行实例”是否意味着多线程?那么一个任务可以是多线程?

我现在很困惑。

共有1个答案

公西宏毅
2023-03-14

措辞不完善;任务有时在不同的上下文中有不同的含义。

在您的示例中,显示了一个包含3个任务的程序的逻辑表示。由于它是一种逻辑表示,因此无法执行,因此考虑线程没有任何意义。

当执行这样的逻辑表示时,它会被转换为物理表示。在最简单的情况下,每个逻辑任务生成N个物理任务,其中N是该任务的并行度。为了让它更明显,我们开始调用物理任务子任务。

可以粗略地说,每个子任务对应一个线程。然而,在操作符链的情况下,子任务合并到一个链中,并在一个线程中执行。

因此,在您的示例中,线程的数量由三个任务的并行度决定。所以你得到了n1n2 N3线程。如果所有任务都具有相同的并行度,则为3*N。

 类似资料:
  • 问题内容: 我有以下使用类的课程。所以我想做的是,在运行cp1实例处理方法的同时,我要并行运行。 但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗?还是线程? 我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并

  • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。

  • 我有一个tasklet在我的JobContext中设置一些信息,另一个tasklet检查一些东西,以知道我是否可以在批处理中执行下一步。如果我在工作流中使用两个不同的步骤,这两个tasklet都能很好地工作,但我希望在同一步骤中使用这两个tasklet。 我尝试在批处理配置中添加两次“.tasklet(taskletName)”,如下所示: 它不起作用:只执行其中一个tasklet(它似乎是第二个

  • 当我运行它时,它有一个错误java.lang.NullPointerException。我能知道它是从哪里来的吗?

  • 我在用Gradle。我有两个任务:“A”和“B”。我想让任务“A”调用任务“B”。我怎么能这么做? 是否可以简单地从现有任务中调用另一个任务?

  • 本文向大家介绍现在有一个宏任务,又有一个微任务两者同一层级,在微任务里面又有一个宏任务和一个微任务,请问执行顺序是什么,为什么?相关面试题,主要包含被问及现在有一个宏任务,又有一个微任务两者同一层级,在微任务里面又有一个宏任务和一个微任务,请问执行顺序是什么,为什么?时的应答技巧和注意事项,需要的朋友参考一下 宏任务——》微任务中的宏任务——》微任务中的微任务——》微任务 宏任务执行完成会去检测微