flink运行时架构

运行组件:

企业微信截图_1759040652879

 最核心的是管理者jobManager和实际干活的taskManager。

jm接收作业图dag,包括做中央协调(协调checkpoint等),

tm使用插槽slots运行数据,不同tm之间也可以交换数据等。

整体运行流程:

企业微信截图_1759123923536

 并行度的概念:

企业微信截图_17591249692049

 slots概念

企业微信截图_17591251323881

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

企业微信截图_17591256368475

 并行度优先级:

优先级从高到低排列如下:

  1. 算子级别

  2. 执行环境级别

  3. 客户端级别(提交时指定)

  4. 集群配置文件级别

  5. 系统默认级别

程序数据流(都是分为经典的三步走):

企业微信截图_17591294115939

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

 

企业微信截图_17591297431864

 

  • 窄依赖 → 形成 算子链,在同一个线程中执行,效率极高。
  • 宽依赖 → 形成 JobEdge,需要经过网络 shuffle,在不同 TaskManager 甚至不同线程间传输数据,是性能瓶颈和资源消耗的关键点。

算子链 是 Flink 的一种重要优化技术,它将多个算子融合在一起,放在同一个线程中执行。原本每个算子都会对应一个独立的任务(Task),运行在独立的线程中,而链化后的多个算子则共同组成一个任务。

  • 这是最核心的条件。只有上下游算子之间是窄依赖(一对一传输)时,才可能被链化。
  • 宽依赖(如 keyByshuffle 等)会产生网络 shuffle,必须断开任务,因此无法链化。
  • 一个方框就代表一个任务(Task),也就是一个算子链。
  • 这个方框内包含的所有小图标,就是被链化在一起的多个算子。
posted @ 2025-09-28 14:25  ---江北  阅读(8)  评论(0)    收藏  举报
TOP