当前位置:   article > 正文

Flink Task、Sub-Task、task slot和parallelism_flink subtask

flink subtask

Task:物理图的节点。任务是工作的基本单元,由Flink的运行时执行。任务精确地封装运算符或运算符链的一个并行实例。Task是逻辑概念,一个Operator就代表一个Task(多个Operator被chain之后产生的新Operator算一个Operator)就是Flink作业计算时的算子 比如 map、keyBy等等。
(Node of a Physical Graph. A task is the basic unit of work, which is executed by Flink’s runtime. Tasks encapsulate exactly one parallel instance of an Operator or Operator Chain.)
Sub-Task:子任务是负责处理数据流分区的任务。术语“子任务”强调的是同一个操作符或操作符链有多个并行任务,即Task会按照并行度分成多个Subtask,Subtask是执行/调度的基本单元。Sub-Task可以理解成算子在运行时根据并行度设置而产生的运算算子实例,每个Subtask需要一个线程(Thread)来执行。不同Task的Sub-Task可能会被组合成Operator Chains,即组合成一个Sub-Task,然后到一个线程里执行。
(A Sub-Task is a Task responsible for processing a partition of the data stream. The term “Sub-Task” emphasizes that there are multiple parallel Tasks for the same Operator or Operator Chain.)
parallelism:并行度,即就是一个operator的并行执行实例个数,即可以并行执行的Sub-Task个数。
Task、Sub-Task、parallelism三者关系可以从下面一个图看出来:

task slot:每个worker (TaskManager)是一个JVM进程,可以在单独的线程中执行一个或多个子任务。为了控制TaskManager接受的任务数量,它提出了任务槽的概念。每个任务槽代表TaskManager的一个固定的资源子集,每个TaskManager配置多个slot。由于Flink允许Sub-Tasks共享slot,一个Slot可以运行多个Sub-Task,但是这些Sub-Task必须是来自同一个Job的不同Task的Sub-Task。注意:同一个slot不能执行同一个Task的多个subTask,另外要注意,不是说一个slot里就只有一个线程,可能会有多个不同Task的Sub-Task,也就是多个线程的。slot目前仅对内存有限制,cpu无法限制。
(Each worker (TaskManager) is a JVM process, and may execute one or more subtasks in separate threads. To control how many tasks a TaskManager accepts, it has so called task slots (at least one).Each task slot represents a fixed subset of resources of the TaskManager.)
Task和slot的关系图:

总的来说:
一个Flink程序由多个任务(Task)组成(source、transformation和 sink)。 一个任务由多个并行的实例(线程)来执行(SubTask), 一个任务的并行实例(线程)数目就被称为该任务的并行度。
Flink中的程序本质上是并行的和分布式的。在执行期间,一个流具有一个或多个流分区,并且每个算子具有一个或多个算子子任务。算子子任务之间彼此独立,并可以在在不同的线程(甚至服务器)中执行,算子的并行度决定了算子子任务数量,同一程序的不同算子可设置不同的并行度。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/546873
推荐阅读
相关标签
  

闽ICP备14008679号