1、Task
flink中每个算子就是一个Task,比如flatMap、map、sum是一个Task。
2、SubTask
算子有几个并行度SubTask的数量就是几,比如
3、算子并行度
算子并行度指的是每个算子的并行度,可用env.setParallelism(1);设置所有算子的并行度,也可以对每个算子单独设置,通过降数据流划分为多个并行的算子实例(SubTask)可实现数据的并行处理。
一个Job的并行度是算子并行度的最大值,比如一个Job中有map算子并行度是2、filter算子并行度是4,则任务并行度就是4。
总结:Flink中,每一个算子都可以成为一个独立任务(task)。
4、分区、分组
分区使用keyBy函数,目的是为了进行并行计算,通过hash(key)%并行度 来把数据分到不同分区然后并行计算提报计算效率。
由于keyby使用了取模运算,所以同一个区分可能存在不同分组的数据,如下图北京和山东在同一个分区,但是在不同分组。
keyby之后使用sum函数会对不同分区内的数据并行计算,同一个并且同一个分组内的数据才会进行sum运算。