当前位置: 首页 > news >正文

Flink运行时的实现细节

一、Flink集群中各角色运行架构

先说Flink集群中的角色吧,有三个分别是客户端(Client)、JobManager、TaskManager。

客户端负责接收作业任务并进行解析,将解析后的二进制数据发送给JobManager;JobManager是作业调度中心,负责对所有作业进行调度;TaskManager是作业执行的工作节点,负责执行具体的工作。其大致流程为:

那么更具体的各个角色的功能是如下图的:

三个角色之间都是通过Actor通信系统进行通信的。

客户端的具体功能就是:解析脚本提交过来的参数并进行封装,然后将任务提交给JobManager。

JobManager中又分为了三个组件:分发器、JobMaster、资源管理器。分发器负责接收任务并为每一个任务开启一个新的JobMaster组件;JobMaster负责处理单个的作业,在作业提交后,他会将JobGraph转化为一个物理层面的数据流图,然后向资源管理器发送请求获取资源,一旦获取到资源以后,JobMaster就会将这个数据流图发送到TaskManager上去执行。资源管理器就是接收JobMaster的资源请求然后去向TaskManager申请资源。

二、并行度

在执行作业时,要处理的数据量很大,可以将一个算子操作复制多分,多个算子共同的执行。那么一个算子的子任务的个数就是这个算子的并行度。而一个程序的并行度是这个程序中所有算子中的最大并行度的值。

三、算子链

在介绍算子链之前应该先介绍不同算子之间的数据流通形式,有一对一形式和重分区形式。一对一形式就是数据由前一个算子直接流向下一个算子;重分区就是数据从前一个算子会进行重新分区的操作之后再发给后面的算子。

算子链就是对并行度相同的且是一对一的算子进行的合并操作,合并之后两个算子就在同一个子任务中执行。这样做的好处就是可以减少不同线程之间的数据交换的时延。

四、任务槽(slot)

Flink中的每一个TaskManager都是一个JVM进程,他可以启动多个线程来执行任务。但是JVM进程能申请到的资源是有限的,它能够让多少个任务来执行呢?每个任务又能分配多少资源呢?这些都是TaskManager设计时的问题。为了解决这些问题,TaskManager在设计时以任务槽(slot)为最小资源分配单位来向线程任务分配资源。这样每个TaskManager就是最多让slot的数量的任务来执行。

任务槽(slot)和并行度都和程序的并行执行有关系。任务槽代表了程序能并行执行的最大程度,是静态的概念;并行度是程序在执行过程中的实际并发程度,是动态的概念。所以必须要求开启的TaskManager的总的任务槽的数量要比设置的并行度的值要大。

http://www.dtcms.com/a/327456.html

相关文章:

  • 嵌入式Linux进程管理面试题大全(含详细解析)
  • 基于热成像摄像头检测蚊子的可行性研究
  • iOS 签名证书全生命周期实战,从开发到上架的多阶段应用
  • 《Qwen2.5-VL 》论文精读笔记
  • 网络协议之TCP和UDP
  • 【iOS】Block基础知识和底层探索
  • Model Context Protocol (MCP)标准化应用程序向大型语言模型 (LLM) 提供上下文协议
  • 如何通过 5 种方法轻松格式化 USB 驱动器
  • Kubernetes 资源管理全解析:从基础到企业级实践
  • MyBatis-Plus——SQL注入器
  • 华清远见25072班C语言学习day7
  • 《算法导论》第 21 章-用于不相交集合的数据结构
  • 01-Ansible 自动化介绍与使用
  • 【数据结构】二叉树结构与相关实现
  • .NET MAUI框架编译Android应用流程
  • 服务降级方式
  • Python实现Amazon Redshift数据库元数据提取类
  • 分布式事务Seata使用不当引发的全局锁问题
  • 解锁Java线程池:从原理到实战的深度剖析
  • 无人机三维路径规划
  • 前端基础知识NodeJS系列 - 06( Node 中的 Stream 的理解?应用场景?)
  • 如何实现PostgreSQL的高可用性,包括主流的复制方案、负载均衡方法以及故障转移流程?
  • TensorBoard的使用 小土堆pytorch记录
  • 数据类型 list
  • 小白挑战一周上架元服务——ArkUI04
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • Java面试宝典:G1垃圾收集器上
  • 超详细!VMware12 安装win7操作系统
  • react+vite来优化下每次使用hook函数都要引入的情况
  • Neo4j Cypher