多线程-是ApacheFlink中的一个任务一个线程


0

我是Flink的新手。据我所知,在Flink中,一个TaskManager可以分为多个槽,一个槽可以分配多个任务,一个任务就是一个线程。

让我们看看示例单词计数:

据我所知,一个任务就是一个线程,有三个任务:Source+map()、keyBy()/window()/apply()和Sink。所以每个线程都有自己的线程,这意味着我们需要三个线程来完成这个示例。我们可以将三个任务(三个线程)放入一个槽中。

不过,我现在读的是它的官方文件:https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html

Flink程序由多个任务组成( transformation/运算符,

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

我现在很困惑。

1 答案


0

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

在您的示例中,您展示了一个包含3个任务的程序的逻辑表示。因为它是一个逻辑表示,它不能被执行,因此考虑线程没有任何意义。

当执行这种逻辑表示时,它被 transformation成物理表示。在最简单的情况下,每个逻辑任务产生N个物理任务,其中N是该任务的并行度。为了让大家明白,我们开始把物理任务称为子任务。

可以粗略地说,每个子任务对应一个线程。但是,在操作符 chaining的情况下,子任务被 coalesce 到一个 chaining中并在一个线程中执行。

在这个例子中,三个线程的数量决定了你的并行度。所以你得到了N1+N2+N3线程。如果所有任务具有相同的并行度,则为3*N。


我来回答

写文章

提问题

面试题