Apache Flink 中的一个任务是一个线程吗
Is one Task one thread in Apache Flink
我是 Flink 新手。据我了解,在Flink中,一个TaskManager可以分为多个slot,一个slot可以分配多个task,一个task就是一个thread。
让我们看一下 WordCount 示例:
据我理解,一个任务就是一个线程,一共有三个任务:Source + map()
、keyBy()/window()/apply()
和Sink
。所以他们每个人都有自己的线程,这意味着我们需要三个线程来完成这个例子。我们可以把三个任务(三个线程)放在一个槽里。
但是,现在我正在阅读它的官方文档:https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html
A Flink program consists of multiple tasks (transformations/operators,
data sources, and sinks). A task is split into several parallel
instances for execution and each parallel instance processes a subset
of the task’s input data. The number of parallel instances of a task
is called its parallelism.
如何理解"A task is split into several parallel instances of execution"? "several parallel instances of execution"是多线程的意思吗?那么一个Task可以是多线程吗?
我现在很困惑。
措辞不完善;任务有时在不同的上下文中具有不同的含义。
在您的示例中,您展示了具有 3 个任务的程序的逻辑表示。由于它是逻辑表示,因此无法执行,因此考虑线程没有任何意义。
当执行这样的逻辑表示时,它会被转换成物理表示。在最简单的情况下,为每个逻辑任务生成 N 个物理任务,其中 N 是该任务的并行度。为了清楚起见,我们开始将物理任务称为子任务。
大致可以说每个子任务对应一个线程。但是,在算子链的情况下,子任务被合并到一个链中,并在一个线程中执行。
所以在你的例子中,线程数是由三个任务的并行度决定的。所以你得到了 N1+N2+N3 个线程。如果所有任务都具有相同的并行度,则为 3*N。
我是 Flink 新手。据我了解,在Flink中,一个TaskManager可以分为多个slot,一个slot可以分配多个task,一个task就是一个thread。
让我们看一下 WordCount 示例:
据我理解,一个任务就是一个线程,一共有三个任务:Source + map()
、keyBy()/window()/apply()
和Sink
。所以他们每个人都有自己的线程,这意味着我们需要三个线程来完成这个例子。我们可以把三个任务(三个线程)放在一个槽里。
但是,现在我正在阅读它的官方文档:https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html
A Flink program consists of multiple tasks (transformations/operators, data sources, and sinks). A task is split into several parallel instances for execution and each parallel instance processes a subset of the task’s input data. The number of parallel instances of a task is called its parallelism.
如何理解"A task is split into several parallel instances of execution"? "several parallel instances of execution"是多线程的意思吗?那么一个Task可以是多线程吗?
我现在很困惑。
措辞不完善;任务有时在不同的上下文中具有不同的含义。
在您的示例中,您展示了具有 3 个任务的程序的逻辑表示。由于它是逻辑表示,因此无法执行,因此考虑线程没有任何意义。
当执行这样的逻辑表示时,它会被转换成物理表示。在最简单的情况下,为每个逻辑任务生成 N 个物理任务,其中 N 是该任务的并行度。为了清楚起见,我们开始将物理任务称为子任务。
大致可以说每个子任务对应一个线程。但是,在算子链的情况下,子任务被合并到一个链中,并在一个线程中执行。
所以在你的例子中,线程数是由三个任务的并行度决定的。所以你得到了 N1+N2+N3 个线程。如果所有任务都具有相同的并行度,则为 3*N。