大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析

news2024/11/16 21:26:25

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(正在更新!)

章节内容

上节完成了如下的内容:

  • Flink 批处理介绍
  • Flink 单词统计 Word Count

在这里插入图片描述

Flink的重要角色

Flink是非常经典的Master/Slave结构实现,JobManager是Master,TaskManager是Slave。
JobManager(Master)

  • 协调分布式执行,他们用来调度Task,协调检查点(CheckPoint),协调失败时恢复等
  • Flink运行时至少存在一个Master处理器,如果配置高可用模式则会存在多个Master处理器,它们其中一个是Leader,而其他的都是StandBy。
  • JobManager接收的应用包括Jar和JobGraph。

TaskManager(Slave)

也称为 Worker

  • 主要职责是从JobManager处接收任务,并部署和启动任务,接收上游的数据处理
  • TaskManager是在JVM中的一个或者多个线程中执行任务的工作节点
  • TaskManager是在JVM中的一个或多个线程中执行任务的工作节点
  • TaskManager在启动的时候会向ResourceManager注册自己的资源信息(Slot数量相等)

角色与功能

  • 任务执行:TaskManager 是 Flink 集群中执行分布式数据处理任务的核心组件。它接收 JobManager 分发的任务,执行具体的计算,并将结果返回给 JobManager 或下一个处理节点。
  • 资源管理:TaskManager 管理分配给它的计算资源(如 CPU、内存)。Flink 中,每个 TaskManager 都有一个或多个 Slot,每个 Slot 可以执行一个并行子任务(Subtask)。Slot 是 Flink 任务资源调度的基本单元。
  • 数据交换与缓存:TaskManager 负责不同任务之间的数据交换,如 Shuffle 操作,并且会对数据进行缓存以提高计算效率。

启动与运行

  • 注册到 JobManager:TaskManager 启动时,会向 JobManager 注册自己,报告自身的可用资源信息(如可用内存和 Slot 数量)。JobManager 通过这些信息进行任务的调度和资源分配。
  • 执行任务:当 JobManager 将任务分配给 TaskManager 后,TaskManager 会启动相应的 Task,并持续监控它的执行状态。任务完成后,TaskManager 将结果汇报给 JobManager。
  • 故障处理:TaskManager 具备一定的故障恢复能力。如果在任务执行过程中发生故障,TaskManager 会向 JobManager 报告,JobManager 根据需要重新分配任务。

通信机制

  • 网络通信:TaskManager 通过网络与其他 TaskManager 和 JobManager 进行通信,交换中间结果数据。Flink 提供高效的网络堆栈来支持低延迟和高吞吐量的分布式数据流处理。
  • RPC 与心跳机制:TaskManager 和 JobManager 之间通过 RPC(远程过程调用)进行交互,并通过心跳机制确保 TaskManager 的健康状态。如果 JobManager 在一段时间内没有收到 TaskManager 的心跳,则可能认为该 TaskManager 已不可用,并触发故障恢复流程。

监控与日志

  • 监控:Flink 提供了多种监控 TaskManager 运行状态的方式,如 Web 界面、日志文件和指标(Metrics)系统。管理员可以通过这些工具监控每个 TaskManager 的资源使用情况、任务执行进度和性能瓶颈。
  • 日志:TaskManager 会记录日志文件,详细描述任务执行情况和出现的错误。这些日志对排查问题和调优系统非常重要。

ResourceManager

针对不同的环境和资源提供者,如(YRAN、Kubernetes、独立部署),Flink提供了不同的ResourceManager。它的作用是负责管理Flink的处理资源单元(Slot)

角色与功能

  • 资源管理:ResourceManager 负责管理整个集群的计算资源,包括 CPU、内存、和网络资源。它接收来自 JobManager 的资源请求,并调度和分配这些资源,以启动必要数量的 TaskManager 实例。
  • 资源请求与分配:当 Flink 应用程序启动时,JobManager 会向 ResourceManager 请求所需的资源,ResourceManager 根据集群的资源状况来分配或启动 TaskManager 实例,以满足这些需求。
  • 资源回收:在任务完成后,ResourceManager 负责回收和释放这些资源,使它们可以被其他任务再次利用。

与 JobManager 的协作

  • 资源调度:JobManager 会根据作业的并行度和资源需求生成任务计划,并将这些需求发送给 ResourceManager。ResourceManager 负责根据集群的资源情况来决定如何分配这些资源。
  • 启动 TaskManager:如果当前集群中可用的 TaskManager 无法满足 JobManager 的需求,ResourceManager 会启动新的 TaskManager 实例来处理任务。这通常通过集成的资源管理平台(如 Yarn、Kubernetes 或 Mesos)来完成。

资源监控

  • 资源使用情况监控:ResourceManager 监控整个集群的资源使用情况,包括 CPU、内存、和网络带宽的利用率。这些监控数据可以帮助管理员优化资源分配和调度策略。
  • 日志和指标:ResourceManager 生成详细的日志文件,记录资源请求、分配、回收等操作。此外,Flink 还提供了多种监控工具,可以实时查看 ResourceManager 的运行状态和资源使用情况。

Dispatcher

它的作用是提供一个REST接口来让我们提交需要执行的应用。
一旦一个应用提交执行,Dispatcher会启动一个JobManager,并将应用转交给它。
Dispatcher还会启动一个WebUI来提供有关作业作业执行信息
注意:某些应用的提交执行的方式,有可能用不到 Dispatcher

角色与功能

  • 作业提交与调度:Dispatcher 负责接收来自客户端的作业提交请求。每当一个作业被提交时,Dispatcher 会启动一个新的 JobManager 实例来管理这个作业的执行。这种设计确保了作业之间的隔离,防止一个作业的失败影响到其他作业。
  • 多作业管理:Dispatcher 可以同时管理多个作业。每个作业都有独立的 JobManager 实例,Dispatcher 负责监控这些作业的状态,并在作业完成或失败后回收资源。
  • REST 接口:Dispatcher 提供一个 RESTful 接口,允许用户通过 HTTP 请求提交、查询和管理作业。这使得 Flink 可以与其他系统更容易地集成,并简化了自动化作业调度的实现。

与 JobManager 的关系

  • 独立 JobManager:在 Dispatcher 负责的架构下,每个提交的作业都会启动一个独立的 JobManager 实例。这样做的好处是每个作业都是隔离运行的,这提升了集群的稳定性和健壮性。
  • 任务调度:Dispatcher 在收到作业提交请求后,首先决定如何分配资源并启动相应的 JobManager,然后由这个 JobManager 来管理和调度 TaskManager 上的具体任务执行。

架构与组件交互

  • 资源管理交互:Dispatcher 并不直接管理集群的资源,而是依赖于 ResourceManager 来提供和调度所需的资源。在作业提交时,Dispatcher 向 ResourceManager 请求启动 JobManager 和 TaskManager 实例。
  • 与客户端交互:Dispatcher 是客户端提交作业的入口点。客户端通过 REST API 与 Dispatcher 通信,提交作业、取消作业或查询作业状态。Dispatcher 负责将这些请求分发到对应的 JobManager。

各个组件之间关系

在这里插入图片描述

Flink运行架构

Flink程序结构

Flink程序的基本构建块是流和转换(请注意,Flink和DataSet API中使用的Dataset也是内部流)。从概念上讲,流是(可能永远无止境的)数据记录流,而转换是将一个或者多个流输入,并产生一个或多个输出流。
在这里插入图片描述
上图表述了Flink的应用程序结构,有Source(源头)、Transformation(转换)、Sink(接收器)三个重要的组成部分。

Source

数据源,定义Flink从哪里加载数据,Flink在流处理和批处理上的Source大概有4类:

  • 基于本地集合的Source
  • 基于文件的Source
  • 基于网络套接字的Source
  • 自定义的Source(Apache Kafka、RabbitMQ等)

Transformation

数据转换的各种操作,也称为算子,有Map、FlatMap、Filter、KeyBy、Reduce、Window等,可以将数据转换计算成你想要的数据。

Sink

接收器,Flink将转换计算后的数据发送的地点,定义了结果数据的输出方向,Flink常见的Sink大概有这么几类:

  • 写入文件
  • 打印出来
  • 写入Socket
  • 自定义Sink(Apache Kafka、RabbitMQ、MySQL、Elasticsearch、HDFS等)

Task和SubTask

  • Task是一个阶段多个功能相同的SubTask集合,类似于Spark中的TaskSet
  • SubTask(子任务)是Flink中任务最小的执行单元,是一个Java类的实例,这个Java类中有属性和方法,完成具体的计算逻辑。比如执行一个操作map,分布式场景下会有多个线程中同时执行,每个线程中执行的都叫一个SubTask。

OperatorChain

Flink的所有操作都叫做Operator,客户端在提交任务的时候会对Operator进行优化操作,能进行合并的Operator会被合并为一个Operator,合并后的Operator成为OperatorChain,实际上就是一个执行链,每个执行链会在TaskManager上一个独立的线程中执行。
在这里插入图片描述

Flink中的数据传输

在运行过程中,应用中的任务会持续进行数据交换。
为了有效利用网络资源和提高吞吐量,Flink在处理任务的数据传输过程中,采用了缓冲机制。

任务槽和槽共享

任务槽也叫做 Task-Slot,槽共享也叫 Slot-Sharing
在这里插入图片描述
每个TaskManager是一个JVM的进程,可以在不同的线程中执行一个或多个子任务。
为了控制一个Worker能接收多少个Task,Worker通过TaskSlot来进行控制(一个Worker至少有一个TaskSlot)

任务槽

每个TaskSlot表示TaskManager拥有资源的一个固定大小的子级,一般来说:我们分配的槽的个数都是CPU的核数相等,比如6核,那就分配6个槽。
Flink将进程的内存进行了划分到多个Slot中,假设一个TaskManager机器有3个Slot,那么每个Slot占1/3的内存(平均分配)。

内存被划分到不同的Slot之后可以得到的好处如下:

  • TaskManager最多能同时并发执行的任务是可以控制的,那就是3个,因为不能超过Slot的数量。
  • Slot有独占的内存空间,这样在一个TaskManager中可以运行多个不同的作业,作业之间不受影响。

槽共享

默认情况下,Flink允许子任务subtask(map[1] map[2] keyby[1] keyby[2])共享插槽,即使他们是不同的任务的子任务,只要他们来自同一个作业。
结果是一个槽可以保存作业的整个管道。

在这里插入图片描述

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

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

相关文章

全新一代理想智能驾驶开启万人体验团招募,OTA 6.2正式全量推送

核心信息: 无图NOA正式推送后,截至7月30日,理想汽车城市NOA日均里程提升3倍,城市NOA日均活跃度提升8倍理想全国门店开启无图NOA试驾后,门店NOA试驾率实现倍增,30万元以上车型AD Max销量占比达到70%理想端到…

NoSQL:数据库领域的“新潮力量”——从起源到未来的全面解析

引言 曾几何时,关系型数据库(RDBMS)就是数据管理的“老大哥”,一统江湖,所向披靡。然而,随着大数据时代的到来,数据量像火箭般飙升,数据的形态也变得越来越“随性”,传统…

一文盘点:性能测试常见的7大指标(文末送性能测试题库)

01性能指标分类 系统性能指标 资源性能指标 中间件指标 数据库指标 稳定性指标 可扩展性指标 可靠性指标 1、系统性能指标 响应时间 系统处理能力 吞吐量 并发用户数 错误率 2、资源性能指标 CPU 內存 磁盘吞吐量 网络吞吐量 3、中间件指标 常用的中间件例如…

webstorm最新激活码

最智能的 JavaScript IDE WebStorm 是一个适用于 JavaScript 和相关技术的集成开发环境。类似于其他 JetBrains IDE,它也会使您的开发体验更有趣,自动执行常规工作并帮助您轻松处理复杂任务。 激活码获取地址 https://web.52shizhan.cn/activity/webs…

微信小程序用web-view实现内嵌h5页面

需求: 在微信小程序里面使用web-view内嵌一个h5页面,并且从h5页面还可以跳到小程序的某个页面 目录 需求: 小程序web-view内嵌h5页面 配置: code: 在h5页面跳转到小程序的某个页面 嵌入sdk: code&…

servlet的过滤器filter和springmvc的拦截器Interceptor

背景 Servlet的过滤器(Filter)和Spring MVC的拦截器(Interceptor)都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。 作用范围 Filter:过滤器是基于Servlet规范…

性价比运动耳机排行榜有哪些上榜?排行榜五大人气机型分享!

开放式蓝牙耳机最近异常火热,不是因为开放式耳机技术含量有多高,而是它从另一个层面,给了很多追求佩戴舒适,又讲究卫生、安全的玩家一种完美的方案。相对于入耳式耳机它又有独特的视听魅力。相比传统入耳式耳机,开放式…

运动耳机哪个牌子的质量好?五款口碑绝佳机型安利!

​现在耳机市场上,开放式耳机因为外观时尚、戴着舒服,成了大家日常爱用的热门货。但是,市面上的开放式耳机品牌多得眼花缭乱,质量也是高低不一,让人挑花了眼。作为一个搞了三年耳机评测的博主,我还是个耳机…

五、工程化开发和脚手架Vue CLI

开发 Vue 的两种方式: 1.核心包传统开发模式:基于 html/css/js 文件,直接引入核心包,开发 Vue. 2.工程化开发模式:基于构建工具(例如:webpack)的环境中开发 Vue。 一、基本介绍: Vue CLl 是 Vue 官方提供的一个可以帮助我们快速创建一个开发…

ISO 26262中的失效率计算:SN 29500-7 Expected values for relays

目录 引言 1 基准条件下的失效率 2 失效率转换 2.1 失效率预测模型 2.2 负载应力系数 2.2.1 应力区域 2.2.2 负载应力系数选择 2.3 环境应力系数 2.4 温度应力系数 2.4.1 温度应力系数计算模型 2.3.2 温度应力系数计算 2.4 失效准则系数 3 任务剖面应力系数 引言 …

使用 nuxi build 命令构建你的 Nuxt 应用程序

title: 使用 nuxi build 命令构建你的 Nuxt 应用程序 date: 2024/8/30 updated: 2024/8/30 author: cmdragon excerpt: nuxi build 命令是构建 Nuxt 应用程序的核心工具,它将你的应用程序打包成适合生产环境的格式。通过理解和使用不同的选项,如 --prerender、–dotenv 和…

【微信小程序】分包--基础概念

基础概念 1. 什么是分包 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 2. 分包的好处 3. 分包前项目的构成 4. 分包后项目的构成 5. 分包的加载规则 6. 分包的体积限…

#单片机基础 笔记二

SPI中断 1.SPI总线协议 1.1协议介绍 SPI接口是Motorola (motorola | Smartphones, Accessories & Smart Home Devices)首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。 时钟由Master控制&#xf…

Fast-BEV: A Fast and Strong Bird’s-Eye ViewPerception Baseline

本文提出了一种简单但有效的框架,称为Fast-BEV,它能够在车载芯片上进行更快的BEV感知。 Fast-BEV框架包括五个部分: (1) 一个轻量级且易于部署的视图变换方法,能够快速将2D图像特征转化为3D体素空间; (2) 一个多尺度图像编码器…

DAY8:DNS查询过程 | CDN的概念和功能 | Cookie和Session是什么?有什么区别?

目录 DNS查询过程 CDN的概念和功能 Cookie和Session是什么?有什么区别? Cookie和Session的概念 Cookie和Session的区别 DNS查询过程 DNS用来将主机名和域名转换为IP地址,其查询过程一般通过以下步骤: 本地DNS缓存检查&…

岩石检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

岩石检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

九方智投控股已完成九章证券领域大模型算法备案

九方智投控股已完成九章证券领域大模型算法备案 8月29日九方智投控股(股票代码:09636.HK)公布其截至2024年6月30日的上半年业绩报告,财报显示,集团总收益达到了约人民币898.1百万元,较去年同期的约人民币86…

[000-01-008].第01节:Consul环境搭建

1.Windows环境搭建环境: 1.1.单机版 a.下载 1.官网说明: b.安装: 1.下载完成后只有一个consul.exe文件,硬盘路径下双击运行,查看版本号信息 c.服务启动: 1.使用开发模式启动:consul ag…

1899. 最满意的方案

代码 #include<bits/stdc.h> using namespace std; int a[100100]; int main() {int x,m,n,s0,i,l,r,mid;cin>>m>>n;for(i1;i<m;i)cin>>a[i];sort(a1,am1);for(i1;i<n;i){cin>>x;if(x<a[1]) ssa[1]-x;else if(x>a[m]) ssx-a[m];els…

Makefile 基础与常用语法详解

目录 一、引言 二、Makefile 基础概念 1.目标、依赖和命令 2.文件名和搜索路径 3.执行顺序和依赖关系 三、Makefile 常用语法 1.变量和宏定义 2.自动变量 3.模式规则 4.条件判断 5.循环 6.伪目标 四、Makefile 实际应用示例 五、总结 一、引言 在软件开发过程中&a…