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之间有数据交流

在这里插入图片描述

核心概念

  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():前面和后面不参与算子链合并

相关推荐

  1. 计算引擎:Flink核心概念

    2023-12-10 04:00:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 04:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 04:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 04:00:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 04:00:03       20 阅读

热门阅读

  1. 85. 最大矩形

    2023-12-10 04:00:03       41 阅读
  2. 力扣labuladong一刷day31天二叉树

    2023-12-10 04:00:03       37 阅读
  3. 在Go中使用循环时使用Break和Continue语句

    2023-12-10 04:00:03       35 阅读
  4. 汽车网络安全--ISO\SAE 21434解析(一)

    2023-12-10 04:00:03       38 阅读
  5. Environment Variables Used by GPUDirect Storage

    2023-12-10 04:00:03       33 阅读
  6. 解释 Git 的基本概念和使用方式。

    2023-12-10 04:00:03       19 阅读
  7. 12.5每日一题(备战蓝桥杯小数运算、拆位练习)

    2023-12-10 04:00:03       24 阅读
  8. 【Spring篇】切点表达式语法规范

    2023-12-10 04:00:03       24 阅读
  9. 服务器数据损坏了有办法修复吗 ?

    2023-12-10 04:00:03       36 阅读
  10. [leetcode 双指针]

    2023-12-10 04:00:03       33 阅读
  11. 力扣labuladong——一刷day67

    2023-12-10 04:00:03       35 阅读
  12. 发送、接收消息,界面不及时刷新

    2023-12-10 04:00:03       41 阅读