Flink 核心概念
并行度
一个特定算子的子任务(subtask)的个数被称为并行度(parallelism)。这样,包含了并行子任务的数据流就是并行数据流,它需要多个分区(stream partition)
来分配并行任务。一般情况下,一个流程序的并行度,可用认为就是其所有算子中最大的并行度。一个程序中,不同的算子可能具有不同的并行度。
算子链
一个数据流在算子之间传输数据的形式可用是一对一(one-to-one)也可以是打乱的重分区(redistributing)模式。
1、一对一模式,即每个输入元素都对应一个输出元素,比如图中的 source 算子和 map 算子之间的关系
2、重分区模式,即每个输入元素可能对应多个输出元素,比如图中的 map 算子和 sink 算子之间的关系
任务槽
每一个 TaskManager
都是一个 JVM 进程,它可以启动多个独立的线程,来并行执行多个子任务 (subtask)。在 Flink 中,每个子任务就是一个线程。
假如一个 TaskManager
有三个 slot
,那么它会将管理的内存平均分成三份,每个 slot
独自占据一份。(隔离内存,共用 CPU)。
不同子任务可用共享同一个 slot ,前提是它们都属于一个 slot 共享组,默认都是 default