Flink运行时架构&核心概念

Flink运行时架构

  1. JobManager:协调,决定何时调度下一个task,对失败任务做恢复。

    • ResourceManager: 负责Flink集群中的资源提供、回收、分配,它负责管理task slot。standalone模式下,不能自行启动新的taskmanager
    • Dispatcher
      • 提供一个REST接口,用来提交Flink应用程序执行
      • 为每个提交的作业启动一个新的jobMaster
        -运行Flink Web UI
    • JobMaster: 负责管理单个JobGraph的执行,我们的代码Flink并不能直接执行,需要翻译为JobGraph才能执行。
  2. TaskManger: 必须有一个

    • taskManaer和taskManager之间有数据交流

Flink运行时架构&核心概念_第1张图片

核心概念

  1. 并行度
    • 并发:多个任务,资源只有一份,需要竞争执行

    • 并行:多个任务,资源有多份,可以同时执行

    • 并行度:一个作业并行执行的程序(数量)

    • 设置并行度

      • 1.代码中设置全局并行度 :env.setParallelism(1);
      • 2.在idea中执行,,如果没有明确设置并行,默认为CPU核数
      • 3.在代码中设置算子并行度,map().setParallelism()
      • 4.不建议在代码中设置并行度,一般在提交作业到集群时指定并行度 bin/flink -p 并行度
      • 5.提交作业到集群,如果没有设置和代码中都没有设置,使用集群配置的并行度,一般为1
    • 优先级:算子并行 > 全局并行度 > shell命令 > 配置文件

  2. 算子链
    • 上下游算子数据分发规则(数据分区规则):ChannelSelector
      • RebalancePartitioner: 轮循方式,上下游并行度不一致时,默认是rebalance
      • RescalePartitioiiner: 相对负载均衡,按照轮循的方式将数据发送到下游组内Task的每个并行度中
      • ShufflePartitioner: 洗牌,按照随机的方式发送到下游Task的每个并行度中
      • BroadcastPartioner: 广播,根据下游并行度个数,每个发一份
      • GlobalPartitioner: 全局,所有的数据之后发送到下游task的第一个并行度中,强制并行度为1
      • KeyGroupStreamPartioner: keyBy的效果,按照key的hash值决定发往下游的哪个并行度中
      • ForwardPartitioner: 直连,上下游并行度一致。上游的并行度对应下游的并行度进行发送,如果上下游并行度一致,默认就是forward
    • 算子链: 将上下游的多个Task合并成一个大的Task,形成的链条就是算子链
    • 合并算子链:
      • 1.上下游并行度必须一样
      • 2.数据的分发规则是forward
    • 合并算子链的作用:减少线程间的切换,缓冲的开销,并且减少延迟的同时增加整体吞吐量
    • 能不能不合并?能
      • 1.全局禁用算子链合并 env.disableOperatorChaining()
      • 2.针对算子设置,startNewChain(): 开启新的算子链,从当前算子开始,与后面的进行合并disableNewChain():前面和后面不参与算子链合并

你可能感兴趣的:(flink,架构,大数据)