1.flink简介与重要概念

news2024/9/23 7:26:09

Introduction 简介

Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink可以运行在常见集群环境如YARN Kubernetes Mesos,内存级别的速度和任意的扩展
Unbounded streams 无界数据流
无界数据流有开始但是没有结束,需要持续不断的处理.处理无界数据通常需要一个特定的顺序,如事件的发生顺序,来判断数据处理的完整性
Bounded streams 有界数据流
有界数据流是开始也有结束的,有界数据可以计算处理之前获取到所有的输入数据.有界数据流中在数据集合总是会被排序,所以数据输入有序的并不是必须的.有界数据流的处理也可以称为批处理.
Deploy Applications Anywhere 可部署到任意地方
Flink是分布式系统,需要资源来进行执行计算任务.Flink集成了常见的集群资源管理平台如 Hadoop YARN Kubernetes也可以运行使用flink自带的stand-alone集群模式
Run Applications at any Scale 可任意扩展伸缩
Flink被设计为成实现任意规模的集群运行有状态数据流应用.应用可以被拆分上千的任务被分发到不同的节点上并行执行.应用也可以限制CPU 主存 磁盘网络IO.Flink可以很容易维护大型应用的状态.通过异步增量的checkpoint算法保证尽可能小的延迟并且保证exactly-once状态一致性.
Leverage In-Memory Performance 利用内存性能
有状态Flink程序基于本地的状态进行优化.任务状态总是在内存维护,如果状态超过了内存限制,会以高效的数据结构存储在磁盘中.因此,任务通过访问本地(通常在内存中)状态进行计算的延迟非常小.Flink利用了定期异步的checkpoint机制持久化本地状态,从而保证了exactly-once(精准一次性)状态一致性

Flink Runtime Framework 运行时架构

image-20230222132054125

image-20230221163229191

  1. 客户端通过分发器Dispatcher上传jar包
  2. 分发器Dispatcher启动JobMaster并提交作业图Job Graph
  3. JobMaster解析作业图Job Graph成执行图Execution Graph,解析出所需的资源数量和slot像集群的资源管理器ResourceManger发起申请
  4. ResourceManager查看集群是否有足够资源,尝试启动新的TaskManager
  5. TaskManager启动之后会向集群中的ResourceManager注册Slot相关的资源信息
  6. ResourceManager向TaskManager通知提供slot资源命令
  7. TaskManager向JobMaster提供slot资源
  8. JobMaster向TaskManager分发Task任务
  9. TaskManager进行任务的执行其中可能会存在数据的交互
  10. 不同的资源管理平台执行流程略有差异其中一些步骤可能会省略,常见的资源管理平台比如Yarn K8S或者不同的集群环境略有不同

Job Manager

The JobManager is the orchestrator of a Flink Cluster. It contains three distinct components: Flink Resource Manager, Flink Dispatcher and one Flink JobMaster per running Flink Job.

JobManager作业管理器是Flink集群的核心组件充当协调者的角色.主要包括三大模块:

  • Flink ResourceManger 资源管理器 负责与TaskManager资源管理slot分配等
  • Flink Dispatcher 分发器 用于任务提交,UI界面 可省略
  • Flink JobMaster 任务管理器 每一个任务用独有一个JobMaster 用于将客户端提交的逻辑图转成执行图

Task Manager

TaskManagers are the worker processes of a Flink Cluster. Tasks are scheduled to TaskManagers for execution. They communicate with each other to exchange data between subsequent Tasks.

Task Manager 任务管理器是Flink集群中负责程序执行的work. 任务会被TaskManager负责调度执行.不同的SubTask子任务之间可以进行数据交互

Task 与 SubTask

Task

是一个实际执行的物理图.一个task是一个flink运行时work的最基本的单元. Task封装了一个并行的Operator算子或者一个Operator Chain算子链

SubTask

A Sub-Task is a Task responsible for processing a partition of the data stream. The term “Sub-Task” emphasizes that there are multiple parallel Tasks for the same Operator or Operator Chain.

SubTask子任务是负责处理一部分数据流任务.Sub-Task强调的是并行执行相同的Operator或者Operator Chain

Graph

Flink 中的执行图可以分成四层:StreamGraph ->JobGraph -> ExecutionGraph -> 物理执行图。

  • StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。
  • JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。
  • ExecutionGraph:JobManager 根据 JobGraph 生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。
  • 物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

parallelism

parallelism并行度 把一个算子操作,“复制”多份到多个节点, 数据来了之后就可以到其中任意一个执行。这样一来,一个算子任务就被拆分成了多个并行的 “子任务”(subtasks),再将它们分发到不同节点,就真正实现了并行计算.

一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。这样,包含并 行子任务的数据流,就是并行数据流,它需要多个分区(stream partition)来分配并行任务。 一般情况下,一个流程序的并行度,可以认为就是其所有算子中最大的并行度。一个程序中, 不同的算子可能具有不同的并行度。

设置并行度的四种方式

  1. 在代码中的Operator中调用setParallelism(int) 方法设置
  2. 在代码中执行环境env中调用setParallelism 方法
  3. 在通过flink提交任务加入 -p 参数指定并行度 或 WEB-UI中显示指定的并行度
  4. 在flink配置文件中指定的默认并行度parallelism.default: 1
  5. 优先级从上到下 建议采用在代码中特定的Operator显式调用setParallelism方法

slot

在执行任务的时候,不是每一个任务都需要启动一个TaskManager,可以让TaskManager进行多线程执行任务.但是TM的资源是有限的,并行的任务越多每个并行的任务分配的资源就会更少.为了控制并发量需要在TM中每个任务运行时占用资源进行划分,此时就出现了Task Slot的概念.可以通过参数taskmanager.numberOfTaskSlots

每一个Slot 表示在TM上一个固定大小的计算资源,用来处理独立的子任务,如TM的slot为3,TM会将资源平均分配成3份,每个slot独占一份,不需要跟其他的作业进行竞争内存资源.

Slot仅仅用来隔离内存,不会涉及CPU级别的隔离.具体应用的时候可以将slot数量设置为CPU核数尽量避免不同slot之间的CPU竞争.默认并行度为CPU核数

Slot共享

image-20230221172013314

默认情况下,Flink 是允许子任务共享 slot 的。如图所示, 只要属于同一个作业,那么对于不同任务节点的并行子任务,就可以放到同一个 slot 上执行。 所以对于第一个任务节点 source→map,它的 6 个并行子任务必须分到不同的 slot 上(如果在 同一 slot 就没法数据并行了),而第二个任务节点 keyBy/window/apply 的并行子任务却可以和 第一个任务节点共享 slot。

Slot的共享有一个好处在于,不同的任务可能耗时不一样,如果每一个任务独占一个slot,可能某一个任务只是简单的接受数据,而另一个任务是对数据的加工处理,此时单纯接收数据的任务会浪费slot中的资源,也会导致下游任务的积压.忙的忙死,闲的闲死.此时利用了slot共享的机制可以避免资源的浪费.slot 共享另一个好处就是允许我们保存完整的作业管道。这样一来,即使某个 TaskManager出现故障宕机,其他节点也可以完全不受影响,作业的任务可以继续执行。

Slot 与 parallelism的关系

task slot是静态的概念 ,是指TaskManager具有的并发执行能力 ,可以通过参数taskmanager.numberOfTaskSlots 进行配置;而并行度(parallelism)是动态概念,也就是TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置。并行度如果小于等于集群中可用 slot 的总数,程序是可以正常执行的,因为 slot 不一 定要全部占用,有十分力气可以只用八分;而如果并行度大于可用 slot 总数并且根据Operator合并和slot共用分析之后,导致超出了并行能力上限,那么心有余力不足,程序就只好等待资源管理器分配更多的资源了。

Operator 与 Operator Chain

Operator

Node of a Logical Graph. An Operator performs a certain operation, which is usually executed by a Function. Sources and Sinks are special Operators for data ingestion and data egress.

一个逻辑图节点.一个Operator算子代表一个具体的操作,通常被Function执行.Sources 和 Sink 是一种特殊的Operator主要数据的收集和输出.Operator算子在Flink中存在代码的实现,如XXXOperator.在编写Flink代码的时候会接触到各种各样的Operator

Operator Chain

image-20230221163114822

An Operator Chain consists of two or more consecutive Operators without any repartitioning in between. Operators within the same Operator Chain forward records to each other directly without going through serialization or Flink’s network stack.

Operator Chain包含了两个以上的Operator.相同名称的Operator Chain通过直连forward数据传递的方式在同一个节点直接进行计算,不需要通过进行Flink之间的网络传输.

合并Operator称为一个Operator Chain 有两个必要的条件

  1. Operator 并行度必须一直 不能出现reblance
  2. one-to-one 操作的Operator数据流维护数据的顺序与分区,上游算子的操作可以直接流入下游算子
    • 比如source 与 map 算子在source算子接受到数据之后可以直接传递给map算子进行操作
    • 如果输入的Socket Source Operator的并行度只能是1,下一个map的算子如果并行度不是1会导致reblance就不能合并成一个Operator Chain
    • keyBy/Windows算子与Sink算子之间因为keyBy会产生重分区Redistribution,当并行度发生改变时,传输方式可能会出现再平衡reblance此时就不能合并成一个Operator Chain

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

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

相关文章

JavaSe第4次笔记

1.转义字符和编程语言无关。 2.斜杠(\)需要转义,反斜杠(/)不需要转义。 3.不能做switch的参数的数据类型:long float double boolean( String可以)。 4.输入的写法:Scanner(回车自动带头文件(import java.util.Scanner;)) Scanner scan …

软件测试(linux命令篇-01文件操作命令)

linux文件篇命令linux系统常用文件操作命令1、查看目录内容及常用参数:ls2、目录切换:cd 3、创建文件:touch 4、创建目录 :mkdir5、 删除文件或目录:rm6、文件或目录的复制:cp7、文件或目录的移动&#xff…

TMS Sphinx crack

TMS Sphinx crack 用于身份访问管理的TMS Sphinx Delphi框架,包括授权和身份验证。 TMS Sphinx允许您为多个应用程序实现单点登录(SSO):web、本机、移动或机器到机器API通信。它可用于通过登录表单、类似的用户界面和基于服务的身份验证来验证实际用户&a…

如何制作一个自定义的winpe?

winpe制作过程 获取相关资源 https://www.aliyundrive.com/s/MP58JbRsm76 文件存放位置 将压缩包存放在一个全英文目录下了,我这里选择了D:/winpe目录 解压文件 将三个压缩包进行解压到当前目录,如下图所示 创建一个mount目录,并在mount目录下分别创建boot和install目…

C++11:继承

目录 继承的基本概念 继承方式 基类和派生类对象赋值转换/切片 继承中的作用域 派生类的四个成员函数: 构造函数 拷贝构造函数 赋值重载 析构函数 静态成员 继承与友元 多继承 菱形继承 多继承的指针偏移问题 组合 继承的基本概念 继承出现的契机是某一…

Java 多线程 --- 锁的概念和类型划分

Java 多线程 --- 锁的概念和类型划分锁的概念乐观锁与悲观锁公平锁与非公平锁什么是可重入锁独占锁与共享锁轻量级锁和重量级锁自旋锁 (Spinlock)锁的概念 锁可以将多个线程对共享数据的并发访问转换为串行访问, 这样一个共享数据一次只能被一个线程访问, 该线程访问结束后其他…

cocos2dx+lua学习笔记:UIPageView的使用

前言 本篇在讲什么 本篇简单介绍Lua篇cocos2dx中UIPageView的相关内容 仅介绍简单的应用,仅供参考 本篇适合什么 适合初学Cocos2dX的小白 适合想要在Cocos2dx-lua中使用UIPageView的人 本篇需要什么 对Lua语法有简单认知 对Cocos2dx-Lua有简单认知 Cocos2…

Hostease美国Linux主机方案租用推荐

美国Linux主机市场在全球市场上具有显著的优势,这使得美国的主机提供商可以提供高性能、高可靠性和高安全性的主机方案,同时为用户提供广泛的选择和灵活性。这些优势也使得美国成为全球最大的主机市场之一。本文将介绍Hostease的美国Linux主机方案租用推…

22《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限,如果错误欢迎批评指正。 第五章:Folding and Aggregation Are Cooperative Transitions (折叠和聚合是同时进行的) -蛋白质折叠的协同作…

基于C/C++获取电脑网卡的IP地址信息

目录 前言 一、网卡是什么? 二、实现访问网卡信息 1.引入库及相关的头文件 2.操作网卡数据 3. 完整代码实现 4.结果验证 总结 前言 简单示例如何在windows下使用c/c代码实现 ipconfig/all 指令 提示:以下是本篇文章正文内容,下面案例可供参考…

【Python】Python项目打包发布(四)(基于Nuitka打包PySide6项目)

Python项目打包发布汇总 【Python】Python项目打包发布(一)(基于Pyinstaller打包多目录项目) 【Python】Python项目打包发布(二)(基于Pyinstaller打包PyWebIO项目) 【Python】Pytho…

【机器学习】决策树(理论)

决策树(理论) 目录一、何为决策树1、决策树的组成2、决策树的构建二、熵1、熵的作用2、熵的定义3、熵的计算4、条件熵的引入5、条件熵的计算三、划分选择1、信息增益( ID3 算法选用的评估标准)2、信息增益率( C4.5 算法…

使用ARM嵌入式工控机构建Node-RED应用的优势

Node-RED是一个基于Node.js的开源可视化流程编程环境,可以轻松构建自定义应用程序,通过连接简单的节点来完成复杂的任务。Node-RED提供了一种简单的方法,可以快速连接到外部服务,从而实现物联网应用的开发。 Node-RED的优点包括&…

工作实战之微服务认证实现

目录 前言 一、钻石段位springsecurityspringsessionredis缓存 1.yml配置将session存储到redis中,实现session共享 2.maven引入 3.原理分析 a.SessionRepositoryFilter拦截进行session存储介质的选择,可以是jdk缓存,或者数据库,也…

Leedcode 二分查找 理解1

一个up的理解 一、二分查找基础例题 力扣https://leetcode.cn/problems/binary-search/ 二、二分查找模板问题 带搜索区间分为3个部分: 1、[mid],直接返回 2、[left,mid-1],设置边界right mid - 1 3、[mid1,right]&#x…

【相关分析-高阶绘图】MATLAB实现皮尔逊相关分析-散点直方图

虽然皮尔逊相关分析很常见,但如何更好的展现相关性、散点分布、柱状分布,以提升研究结果的美感和冲击感呢?本文拟通过MATLAB绘制包含散点分布、柱状分布、线性展示的散点直方图,有助于审稿人眼前一亮。 1、Pearson相关系数原理 Pearson相关系数(Pearson Correlation Co…

Zookeeper3.5.7版本——单机部署(linux环境-centos7)

目录一、Zookeeper3.5.7官网下载1.1、官网下载地址1.2、下载步骤二、jdk11安装(Zookeeper需要jdk支持)三、Zookeeper3.5.7安装3.1、安装3.2、配置修改3.3、操作 Zookeeper四、配置文件参数解读一、Zookeeper3.5.7官网下载 1.1、官网下载地址 官网下载地…

基本面向对象编程-计算机基本功能实现_

《C/S项目实训》实验报告 实验名称: 基本面向对象编程-计算机基本功能实现_ 一、实验目的 通过综合实践项目,理解Java 程序设计是如何体现面向对象编程基本思想,掌握OOP方法,掌握事件触发、消息响应机制。进一步巩固面向对…

T_SQL和SQL的区别

一. SQL Server和T-SQL的区别(⭐T-SQL 包含了 SQL)SQL Server是结构化查询语言,是目前关系型数据库管理系统中使用最广泛的查询语言T-SQL是标准SQL语言的扩展,是SQL Server的核心,在SQL的的基础上添加了变量,运算符,函数和流程控制等,Microso…

AutoCAD通过handle id选择实体

获得实体的handle id。注意是handle id 不是id,方法有2种:方法(a):通过ArxDeg插件(ObjectARX附带的源码编译得到:\samples\database\ARXDBG)查找:此handle id本来就是16进…