articleList

08-Flink的并行度概念理解和调整优先级说明

2025/03/13 posted in  Flink
Tags: 

  • Flink 是分布式流式计算框架

    • 程序在多节点并行执行,所以就有并行度 Parallelism
    • DataStream 就像是有向无环图(DAG),每一个 数据流(DataStream) 以一个或多个 source 开始,以一个或多个 sink 结束
  • 流程

    • 一个数据流( stream) 包含一个或多个分区,在不同的线程/物理机里并行执行
    • 每一个算子( operator) 包含一个或多个子任务( subtask),子任务在不同的线程/物理机里并行执行
    • 一个算子的子任务subtask 的个数就是并行度( parallelism)
      41544715.png
  • 并行度的调整配置

    • Flink流程序中不同的算子可能具有不同的并行度,可以在多个地方配置,有不同的优先级
    • Flink并行度配置级别 (高到低)
      • 算子
        • map( xxx ).setParallelism(2)
      • 全局env
        • env.setParallelism(2)
      • 客户端cli
        • ./bin/flink run -p 2 xxx.jar
      • Flink配置文件
        • /conf/flink-conf.yaml 的 parallelism.defaul 默认值
      • 某些算子无法设置并行度
      • 本地IDEA运行 并行度默认为cpu核数
  • 一个很重要的区分 TaskSolt和parallelism并行度配置

    • task slot是静态的概念,是指taskmanager具有的并发执行能力
    • parallelism是动态的概念,是指 程序运行时实际使用的并发能力
    • 前者是具有的能力比如可以100个,后者是实际使用的并发,比如只要20个并发就行
  • Flink有3中运行模式

    • env.setRuntimeMode(RuntimeExecutionMode.STREAMING);
    • STREAMING 流处理
    • BATCH 批处理
    • AUTOMATIC 根据source类型自动选择运行模式,基本就是使用这个