flink运行时架构
运行组件:

最核心的是管理者jobManager和实际干活的taskManager。
jm接收作业图dag,包括做中央协调(协调checkpoint等),
tm使用插槽slots运行数据,不同tm之间也可以交换数据等。
整体运行流程:

并行度的概念:

slots概念

前后发生的算子任务,允许共享slots:

并行度优先级:
优先级从高到低排列如下:
-
算子级别
-
执行环境级别
-
客户端级别(提交时指定)
-
集群配置文件级别
-
系统默认级别
程序数据流(都是分为经典的三步走):

不同阶段的流图:(注意这里Keyby其实没有计算)

- 窄依赖 → 形成 算子链,在同一个线程中执行,效率极高。
- 宽依赖 → 形成 JobEdge,需要经过网络 shuffle,在不同 TaskManager 甚至不同线程间传输数据,是性能瓶颈和资源消耗的关键点。
算子链 是 Flink 的一种重要优化技术,它将多个算子融合在一起,放在同一个线程中执行。原本每个算子都会对应一个独立的任务(Task),运行在独立的线程中,而链化后的多个算子则共同组成一个任务。
- 这是最核心的条件。只有上下游算子之间是窄依赖(一对一传输)时,才可能被链化。
- 宽依赖(如
keyBy、shuffle等)会产生网络 shuffle,必须断开任务,因此无法链化。
- 一个方框就代表一个任务(Task),也就是一个算子链。
- 这个方框内包含的所有小图标,就是被链化在一起的多个算子。

浙公网安备 33010602011771号