死磕flink(五)

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 死磕flink(五)

Flink分布式架构与核心组件

Flink作业提交过程

standalone模式下的作业提交过程如下:

在一个作业提交前,Master和TaskManager等进程需要先被启动。我们可以在Flink主目录中执行脚本来启动这些进程


bin/start-cluster.sh

Master和TaskManager被启动后,TaskManager需要将自己注册给Master中的ResourceManager,这个初始化和资源注册过程发生在单个作业提交前,称之为第0步。

①、用户编写应用程序代码,并使用Flink客户端(Client)提交该作业,通常,这些程序会使用java或者Scala语言编写。并调用Flink API构建出逻辑视图,这些代码以及相关配置文件被编译并打包,然后被提交至Master节点的Dispatcher,形成一个应用作业(Application)

②、Dispatcher接收到提交的作业后,会启动一个JobManager,该Jobmanager负责协调这个作业的各项任务。

③、JobManager向ResourceManager申请所需的作业资源,这些资源可能包括cpu,内存等。

④、由于在前面的步骤中,TaskManager已经向ResourceManager注册了可供使用的资源,这时处于空闲状态的TaskManager将被分配给JobManager。

⑤、JobManager将用户作业中的逻辑视图转化为物理视图,如上面的视图中,该图显示了作业被并行化后的执行过程,JobManager将计算任务分配并部署到多个TaskManager上,此时,一个Flink作业正式开始执行。

在计算任务执行过程中,TaskManager可能会与其他TaskManager交换数据,使用特定的数据交换策略。同时,TaskManager还会将任务的状态信息传递给JobManager,这些状态信息包括任务的启动,执行和终止状态,以及快照的元数据等。

Flink的核心组件

在这个作业提交流程的基础上,进一步介绍下各个组件

①、Client:客户端,用户通常使用Flink提供的客户端工具(如位于Flink主目录下的bin目录中的命令行工具)来提交作业,客户端会对用户提交的Flink作业进行预处理,并将作业提交到Flink集群中。在提交作业时,客户端需要配置一些必要的参数。例如使用Standalone集群还是YARN集群等。整个作业会被打包成一个JAR文件,DataStream API会被转换成一个JobGraph,该图类似于逻辑视图。

②、Dispatcher(调度器):Dispatcher可以接收多个作业,每次接收作业时,会为该作业分配一个JobManager,Dispatcher通过提供表述性状态转移REST式的接口,使用超文本传输协议HTTP来对外提供服务。

③、JobManager(作业管理器):JobManager是单个Flink作业的协调者。每个作业都有一个对应的JobManager负责管理。JobManager将客户端提交的JobGraph转换为ExecutionGraph,该图类似于并行物理执行图,JobManager会向ResourceManager申请所需的资源。一旦获取足够的资源,JobManager会将ExecutionGraph及其他计算任务分发到多个TaskManager上。此外,JobManager还管理多个TaskManager,包括收集作业状态信息,生成检查点,必要时进行故障恢复等。

④、ResourceManager(资源管理器):Flink可以在Standalone,YARN,kubernetes等环境中部署,而不同环境对计算资源的管理模式有所不同,为了解决资源分配问题,Flink引入了ResourceManager模块,在Flink中,计算资源的基本单位是TaskManafger上的任务槽位Slot,ResourceManager的主要职责是从资源提供方(如YARN)获取计算资源,当JobManager需要计算资源时,ResourceManager会将空闲的Slot分配给JobManager,在计算任务结束后,ResourceManager会回收这些空闲的Slot。

⑤、TaskManager(任务管理器):TaskManager是实际执行计算任务的节点,一般来说,一个Flink作业会分布在多个TaskManager上执行,每个TaskManager提供一定数量的Slot,当一个TaskManager启动后,相关的Slot信息会被注册到ResourceManager中。当Flink作业提交后,ResourceManager会将空闲的Slot分配给JobManager,一旦JobManager获取了空闲的Slot,它会将具体的计算任务部署到这些Slot,并在这些Slot上执行。在执行的过程中,TaskManager可能会与其他的TaskManager进行数据交换,因此需要进行必要的数据通信,总之,TaskManager负责具体的计算任务的执行,它会在启动时将Slot资源向ResourceManager注册。

Flink组件栈

c6819a0b5b0252bb642a582a55cab55d.png

①、部署层

Local模式:Flink支持本地模式,包括单节点(SingleNode)和单虚拟机(SingleJVM)模式,在SingleNode模式中,JobManager和TaskManger运行在同一个节点上;在SingleJVM模式中,所有的角色都在同一个JVM上运行。

Cluster模式:Flink可以部署在Standalone,YARN,Mesos和Kubernetes集群上,Standalone集群需要配置JobManager和TaskManager的节点,然后通过Flink提供的脚本启动。YARN,Mesos和Kubernetes集群提供了更强大的资源管理和集群扩展能力。

Cloud模式:FlinK还可以部署在各大运平台上,如AWS,谷歌云和阿里云,使用户能够在云环境中灵活地部署和运行作业。

②、运行时层

运行时层是Flink的核心组件,支持分布式执行和处理,该层负责将用户提交的作业转换为任务,并分发到相应的JobManager和TaskManager上执行,运行时层还涵盖了检查点和故障恢复机制,确保作业的容错性和稳定性。

③、API层

Flink的API层提供了DataStream API 和DataSet API,分别用于流式处理和批处理,这两个API允许开发者使用各种操作符和转换来处理数据,包括转换,连接,聚合,窗口等计算任务。

④、上层工具

在API层之上,Flink还提供了一些工具来扩展其功能:

a:复杂事件处理(CEP):面向流处理的库,用于检测和处理复杂的事件模式。

b:图计算库(Gelly):面向批处理的图计算库,用于执行图算法。

c:Table API和SQL:针对SQL用户和关系型数据处理场景的接口,允许用户使用SQL语法和表处理流和批数据。

d:PyFlink:针对Python用户的接口,使其能够使用Flink进行数据处理,目前主要基于Table API.

综上所述,Flink可以在不同层次上提供了丰富的组件和工具,支持流处理和批处理,以及与不同环境(本地,集群,云)的无缝集成,使开发者能够灵活地构建和部署大规模数据处理应用程序。

作业执行阶段

e54c494eddd2d6b697686565f0cc3a2a.png

在Apache Flink中,数据流作业的执行过程可以划分为多个阶段,从逻辑视图到物理执行图的转换,这个过程包括了从StreamGraph到JobGraph,再到ExecutionGraph,最终映射到实际的物理执行图,下面详细说明这个过程:

a:StreamGraph:逻辑视图:StreamGraph是用户编写的流处理应用程序的逻辑表示。它包含了流的转换操作,算子之间的关系,事件时间处理策略,容错配置等。StreamGraph是用户定义的数据流拓扑,是一种高级抽象,用户可以通过DataStram API构建StreamGraph。

b:JobGraph作业图:JobGraph是从StreamGraph派生而来的,表示一个具体的作业执行计划,在JobGraph中,StreamGraph中的逻辑算子被映为具体的物理算子,且有明确的执行顺序和任务间的依赖关系。JobGraph还包含了资源配置,任务并行度,优化选项等信息,JobGraph是从逻辑视图转换物理执行的关键步骤。

c:ExecutionGraph(执行图):ExecutionGraph是JobGraph的执行时表示,它是实际执行计划的核心,在ExecutionGraph中,JobGraph中的每个任务都会被映射到一个具体的执行任务,每个任务可以包含一个或者多个子任务,这些子任务被映射到不同的TaskManager上,ExecutionGraph还负责维护作业的执行的状态,以及任务之间的调度和通信。

d:物理执行图:ExecutionGraph被映射到实际的物理执行图,即在TaskManager集群上真正执行的任务拓扑,物理执行图包括了任务的并行执行,数据交换,任务状态管理等细节,它是作业分布式环境中实际运行的体现。

总结起来,StreamGraph到JobGraph到ExecutionGraph的转换是Flink作业执行计算的关键步骤。从逻辑视图到物理执行图的转换过程考虑了作业的拓扑结构,资源分配,任务调度等方面的问题,确保了作业可以在分布式环境中高效的运行,这一系列转换过程使得用户可以通过高层次的抽象来描述作业的逻辑,而Flink框架会负责将其转换为可以执行的任务图,实现数据流的处理和计算。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
SQL NoSQL Java
Flink SQL 问题之执行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
1036 2
|
11天前
|
并行计算 数据格式 异构计算
完整教程:从0到1在Windows下训练YOLOv8模型
本文详细介绍在Windows系统下使用YOLOv8训练目标检测模型的完整步骤,涵盖环境配置、数据集准备、模型训练与测试、常见问题解决及GPU加速技巧。提供详细命令与代码示例,并推荐现成数据集与工具,助您高效完成模型训练。
553 13
完整教程:从0到1在Windows下训练YOLOv8模型
|
1月前
|
机器学习/深度学习 算法 安全
近端策略优化算法PPO的核心概念和PyTorch实现详解
近端策略优化(PPO)是强化学习中的关键算法,因其在复杂任务中的稳定表现而广泛应用。本文详解PPO核心原理,并提供基于PyTorch的完整实现方案,涵盖环境交互、优势计算与策略更新裁剪机制。通过Lunar Lander环境演示训练流程,帮助读者掌握算法精髓。
156 54
|
10天前
|
传感器 人工智能 监控
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
79 14
|
11天前
|
人工智能 缓存 调度
《AI协同开发深潜:从架构迷雾到系统澄明的实战路径》
本文以企业级供应链管理系统迭代项目为背景,讲述团队借助Cursor、GitHub Copilot X、Sourcegraph Cody构建AI工具矩阵,破解架构耦合、功能开发难题的实战过程。通过Copilot X梳理旧系统架构、定位耦合风险并提供重构方案,Cursor基于上下文完成精准编码与实时优化,Cody排查逻辑断点、优化性能与安全风险,三者协同形成闭环。最终项目21天完成,架构梳理、编码、问题排查效率大幅提升,系统指标全面达标。文章还总结了AI协作关键经验,指出AI是“思维伙伴”,未来开发者核心价值在于与AI协同,将业务需求转化为最优方案。
65 12
|
1月前
|
存储 人工智能 监控
LangGraph实战:从零构建智能交易机器人,让多个AI智能体像投资团队一样协作
如今的量化交易已远超传统技术指标,迈向多智能体协作的新时代。本文介绍了一个基于 **LangGraph** 构建的多智能体交易系统,模拟真实投资机构的运作流程:数据分析师收集市场情报,研究员展开多空辩论,交易员制定策略,风险团队多角度评估,最终由投资组合经理做出决策。系统具备记忆学习能力,通过每次交易积累经验,持续优化决策质量。
215 8
LangGraph实战:从零构建智能交易机器人,让多个AI智能体像投资团队一样协作
|
资源调度 流计算 Docker
死磕flink(七)
死磕flink(七)
|
1月前
|
Java 开发工具
JDK多版本设置并且切换
本文介绍了如何在不卸载旧版本的前提下,配置并切换多个JDK版本。通过统一安装路径、设置环境变量(如JAVA_HOME、JAVA_HOME8、JAVA_HOME17),并调整系统PATH顺序,实现快速切换。最终通过CMD和开发工具验证切换是否生效。
JDK多版本设置并且切换
|
1月前
|
人工智能 安全 Ubuntu
保姆级教程 | 在Ubuntu上部署Claude CodeUI全过程
Claude Code Plan Mode 是 Anthropic 推出的智能编程助手功能,采用只读分析模式,保障代码安全的同时提供AI驱动的项目规划与风险评估。该模式平均每周为开发者节省27小时,显著提升开发效率与项目成功率,是AI编程领域的重要创新。
233 10
|
SQL 算法 API
死磕flink(三)
死磕flink(三)