我说flink基本概念task、sub task、operator chain

  • Post author:
  • Post category:其他


在这里插入图片描述



一,operator 算子

把operator翻译成算子,真是没谁了,众口铄金,大家现在都这样叫了。

operator代表对数据的各种操作,包括从数据源获取数据,把计算结果输出到存储,以及从获取数据到输出数据的过程中对数据的各种处理。

按照官方的说法,算子分为source/transformation/sink三种,source和sink都比较简单,重点要掌握的是transformation。

transformation根据算子的功能可以分为四类:普通算子、分组算子(keyby/group by)、流拆合算子、分区算子。

  • 普通算子就是对数据进行常规计算和转换,如map、flatMap
  • 分组算子主要是keyBy,groupBy是Dataset的api,使用的较少。准确的说,keyBy代表一系列算子,因为很多算子只有在keyBy产生的keyedStream才能使用,如reduce、max、min、sum等等
  • 流拆合算子,包括将多个流合并为一个流如union、connect;将一个流拆分为多个流,如split
  • 分区算子:将数据依据一定的规则分别发送到下游任务中去,有四种:reblance、rescale、shuffle、广播



二,operator chain 和 task

数据往往需要一系列由先后顺序的算子合作才能计算出预期的结果。处理source和sink算子外,其他算子都有输入和输出,下游算子的输出将作为下游算子的输入。如果上游算子和下游算子不在一个taskslot,则需要数据传输:包括数据的序列化和反序列化、数据传输,这会导致任务的高延迟。

flink对计算过程中满足条件的算子组合成一个

算子链

,这个算子链在逻辑上是一个

task

,会在同一个taskslot执行,并且数据不需要序列化和反序列化,提升系统的性能。

组成operator chain的算子需要满足一定的条件:都是one to one的算子,上游的输出不会被分发到不同的下游任务,下游算子的输入来自一个上游算子的输出。

当然还有一些其他的限制:比方说要开启算子链、算子的算子链属性必须要满足条件



三,subtask

task是逻辑上的概念,可能是一个算子,也可能是一个算子链。

在运行时,通常一个task会有大于1的并行度,同一个task会并行执行在多个taskslot上,执行在taskslot上的task称之为task的subtask。



版权声明:本文为epitomizelu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。