Flink学习笔记:整体架构

开一个新坑,系统性的学习下 Flink,计划从整体架构到核心概念再到调优方法,最后是相关源码的阅读。

今天就来学习 Flink 整体架构,我们先看官网的架构图

Flink Architecture

图中包含三部分,分别是 Client、JobManager 和 TaskManager。其中 Client 并不属于 Flink 集群,它主要用来把用户编写的程序翻译成 StreamGraph 然后优化成 JobGraph,再将 JobGraph 提交到 Flink 集群执行。

JobManager

Flink 集群的 JobManager 是用来接收 Client 提交的任务,并且分发给 TaskManager 去执行。此外,JobManager 还有一些其他的职责,例如任务调度,协调 checkpoint 和协调从失败中恢复。

每个 Flink 集群至少要有一个 JobManager,但在生产环境中通常是高可用模式部署,即部署多台 JobManager,其中一台作为 Leader,其他的作为 Standby 节点。当 Leader 挂掉时,其他的 Standby 节点会有一台被选举为新的 Leader 提供服务。这样就能避免 JobManager 单机故障影响到整个 Flink 集群的可用性。

JobManager 主要由以下几部分组成,下面我们分别来看每部分的作用。

JobManager

DataFlow Graph

JobManager 收到 JobGraph 之后,根据并行度的设置,将各个算子任务拆分成并行的子任务,最终生成 ExecutionGraph。

Checkpoint coordinator

Checkpoint 是 Flink 最核心的概念之一,Flink 的容错机制主要靠 checkpoint 来保障。而 checkpoint 的生成会恢复则由 checkpoint coordinator 来负责。

Job Dispatch

Job Dispatch 提供了 REST 接口用于提交 Flink 任务,并为每个任务启动一个 JobMaster。JobMaster 负责管理单个 JobGraph 的执行。

Task Scheduling

Task Scheduling 负责 Task 部署和调度,值得一提的是,JobManager 和 TaskManager 以及 Client 之间的通信都是通过一个叫 Actor System 的 RPC 系统实现的。

Resource Manager

Resource Manager 负责集群中的资源的分配回收,它管理的资源单元叫做 task slot,对于不同的部署环境,Resource Manager 有不同的实现,

Actor System

Actor System 是 Flink 集群中的一种 RPC 通信的组件,JobManager 和 TaskManager 以及 Client 之间的通信都是基于 Actor System 的。而 TaskManager 之间的数据传递是基于 Netty 的。

TaskManager

聊完了 JobManager,我们再来看下 TaskManager 的结构。TaskManager 主要负责执行作业的 task,并缓存和交换数据流。TaskManager 中最小的资源调度单位是 task slot,这点在前面介绍 Resource Manager 时也提到过。它表示并发处理 task 的数量。

TaskManager

Task Execution

TaskManager 在接到 JobManager 部署的任务后,就会申请相应的 task slot 去执行任务。

Data Exchange

Data Execution 主要负责 TaskManager 之间的数据交互的一些操作,这里主要关注逻辑层面,例如一些 shuffle 操作。而网络传输则主要是由 Network Manager 来实现。

Memory Management

Memory Management 负责 TaskManager 的内存管理,在执行任务过程中,接收到的一些数据是需要放在内存中进行处理的。相应的内存管理操作依赖于 Memory Management 模块。

Actor System

Actor System 我们在前面提到过,TaskManager 和 JobManager 之间的通信全靠它。

Network Manager

Network Manager 主要负责 TaskManager 之间的数据交互,它是基于 Netty 实现的。

最后多提一个 Graph 的概念,前面我们已经了解到了 JobManager 会将 JobGraph 根据并行度的配置转换成 ExecutionGraph。在这之后,JobManager 会对作业进行调度,将 task 部署到各个 TaskManager 上,最终就形成了物理执行图,也就是 PhysicalGraph。

这里小结一下,Flink 中四种图的生成顺序是:用户编写的代码生成 StreamGraph,Client 将其进行优化,主要是将多个符合条件的节点 chain 在一起,生成了 JobGraph,然后将 JobGraph 提交到 JobManager,再由 JobManager 生成并行版本的 ExecutionGraph,待JobManager 将 task 调度后,生成的图被称为 PhysicalGraph。

Flink 的几种部署模式

根据集群的生命周期、资源隔离以及 main() 方法的执行,通常将 Flink 的部署模式分为三种:Session Mode、Per-Job Mode 和 Application Mode。下面我们分别介绍这三种部署模式。

Session Mode

Session Mode 下,所有的任务共享 JobManager 和 TaskManager,JobManager 的生命周期不受提交的 Job 影响,会长期运行。

SessionMode

Per-Job Mode

Per-Job Mode 下,每个任务独享 JobManager 和 TaskManager,资源充分隔离。JobManager 的生命周期和 Job 的生命周期绑定。

PerJobMode

Application Mode

Application Mode 下,每个 Application 对应一个 JobManager,且可以运行多个作业。客户端无需将依赖包上传到 JobManager,只负责提交作业,减轻了客户端的压力。提交作业后,JobManager 主动从 HDFS 拉取依赖包。

ApplicationMode

三种模式的对比
SessionPer-JobApplication
优点1、资源充分共享,提升资源利用率
2、作业集中管理,运维简单
1、资源充分隔离
2、每个作业的 TM Slots 可以不同
1、有效降低带宽和客户端负载
2、Application 之间实现资源隔离,Application 中的资源共享
缺点1、资源隔离差
2、TM 不易扩展,伸缩性差
1、资源浪费1、仅支持 Yarn 和 Kubunetes (个人感觉够用了)

总结

最后来总结一下,今天主要学习了 Flink 的整体架构和三种部署模式。

1、Flink 的集群架构上主要包含 JobManager 和 TaskManager,其中 JobManager 主要负责一些作业调度和资源协调的工作,TaskManager 则主要负责执行任务。

2、Flink 的部署模式分为 Session、Per-Job 和 Application 三种,Session 模式是所有 Job 共享 JobManager 和 TaskManager,Per-Job 则是作业独享的,而 Application 模式则是在 Application 中共享 JobManager。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88867.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode 热题 100】105. 从前序与中序遍历序列构造二叉树——(解法二)O(n)

Problem: 105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 【LeetCode 热题 100】105. 从前序与中序遍历序列构…

完美卸载 Ubuntu 双系统:从规划到实施的完整指南

📖 前言 最近成功完成了一次 Ubuntu 双系统的完整卸载,从最初的分区删除到最终解决 GRUB 引导问题,整个过程虽然有些曲折,但最终完美解决。本文将详细分享整个卸载过程,希望能帮助到有类似需求的朋友。 &#x1f3af…

深入理解oracle ADG和RAC

1. 引言 本节详细介绍oracle ADG和RAC。当然这里讲得的详细是相对理论的深入,不涉及到实验,比如ADG和RAC的搭建及调优等。 RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的两大核心高可用和灾备技术。它们是 Oracle 数据库高可用…

网络安全实践:从环境搭建到漏洞复现

要求:1.搭建docker2.使用小皮面板搭建pikachu靶场3.使用BP的爆破模块破解pikachu的登陆密码步骤4.Kail的msf复现永恒之蓝一.搭建docker1. Docker介绍Docker 是容器,可以部分完全封闭。封闭意味:一个物质(放到容器)&…

车载诊断架构 --- 诊断功能开发流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

mysql数据库知识

MySQL数据库详解MySQL是目前全球最流行的关系型数据库管理系统之一,以其开源免费、高效稳定、易于扩展等特点,被广泛应用于Web开发、企业级应用等场景。本文将从基础概念、核心特性到实际应用,对MySQL进行全面解析。一、MySQL的基本概念1. 关…

基于springboot的美食文化和旅游推广系统

博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

Rust赋能文心大模型4.5智能开发

文心大模型4.5版本概论 文心大模型4.5是百度推出的最新一代大规模预训练语言模型,属于文心大模型(ERNIE)系列。该模型在自然语言处理(NLP)、多模态理解与生成等领域表现出色,广泛应用于智能搜索、内容创作、对话交互等场景。 核心能力 语言理解与生成 支持复杂语义理解…

前端抓包(不启动前端项目就能进行后端调试)--whistle

1、安装 1.1.安装node.js 1.2.安装whistle npm install -g whistle2.安装浏览器插件【SwitchyOmega】在谷歌浏览器应用商店下载安装即可配置proxy127.0.0.1:8989是w2 start的端口号启用代理3.启动服务(每次抓包都得启动) w2 start点击链接访问网页 http:…

kettle从入门到精通 第102课 ETL之kettle xxl-job调度kettle的两种方式

之前我们一起学习过xxl-job调度carte,采用的xxl-job执行器方式,不了解的可以查看《kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans 》 今天我们一起来学习下使用xxl-job直接使用http调用…

纯前端 JavaScript 实现数据导出到 CSV 格式

日常开发中,数据导出到文件通常有两种方式: 在后端处理,以文件流或者资源路径的方式返回;后端返回数据,前端按需处理后再触发浏览器的下载事件,已保存到本地文件。 这里介绍后者的一种零依赖的实现方式。…

香港理工大学实验室定时预约

香港理工大学实验室定时预约 文章目录香港理工大学实验室定时预约简介接单价格软件界面网站预约界面代码对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/d…

Spring AI 项目实战(十七):Spring Boot + AI + 通义千问星辰航空智能机票预订系统(附完整源码)

系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门2Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码)3Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)4

STM32CubeMX+CLion 使用ARM_CMSIS_DSP

安装 参考: 【CLion开发stm32】如何使用DSP库 - 未知的奇迹 - 博客园 实际上这样配置会出一点小问题,现对其修改 1. 项目根目录下新建 DSP_LIB文件夹 将目录STM32CubeMX\Repository\STM32Cube_FW_G4_V1.6.1\Drivers\CMSIS\DSP下的Include文件夹和So…

深入解析C#接口实现的两种核心技术:派生继承 vs 显式实现

—— 如何优雅解决多接口冲突问题 🔍 核心概念速览 派生成员实现 类通过继承基类方法隐式满足接口实现需求 interface IIfc1 { void PrintOut(string s); }class MyBaseClass { // 基类实现方法 public void PrintOut(string s) > Console.WriteLine($"Cal…

鸿蒙项目构建配置

鸿蒙项目构建配置 参考文档 深入鸿蒙开发之后,一般会遇到以下几个问题。 每次编译的时候需要手动配置不同的 versionCode 和 versionName;在使用 git 管理代码的时候,不同的人或者不在同一台电脑上,dev eco 这个编译器需要经常…

os.machine()详解

核心功能返回硬件架构 返回字符串表示系统的硬件架构,常见值包括: x86_64:64 位 x86 架构(Intel/AMD)armv7l:32 位 ARM 架构(如树莓派 3B)aarch64:64 位 ARM 架构&#x…

linux-shell脚本

linux-shell脚本一、什么是shell脚本?二、为什么要学习shell脚本?三、脚本执行的方式3.1 bash test.sh3.2 ./test.sh3.3 source test.sh3.4 . test.sh四、变量的使用4.1 变量定义与使用4.2 避免变量混淆4.3 位置变量for循环和位置变量的结合案例4.4 read…

【嵌入式】51单片机学习笔记-Keil5软件安装教程

00. 目录 文章目录00. 目录01. Keil C51概述02. Keil C51下载03. Keil C51安装04. Keil C51注册05. 附录01. Keil C51概述 Keil C51 是德国Keil公司(现被ARM收购)开发的嵌入式开发工具,专注于8051单片机的C语言和汇编开发。它是μVision IDE…

ai之 ubuntu本地安装mineru2.1.0

MinerU 目录 一、更新内容概述写在前面的话:总体来看,2.0版本升级为全新的 VLM 解析模式,更优于以前的基础解析方式。二、MinerU 安装部署下面使用源码来进行环境安装。注意:当前状态说明推荐解决方案如果是下载插件慢可以 指定阿里源三、MinerU 使用1. 在线体验2. 命令行使…