【入门Flink】- 05Flink运行时架构以及一些核心概念
系统架构
Flink运行时架构Standalone会话模式为例
1)作业管理器(JobManager)
JobManager 是一个 Flink 集群中任务管理和调度的核心
,是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。
JobManger 又包含 3 个不同的组件。
(1)JobMaster
JobMaster 是 JobManager 中最核心的组件,负责处理单独的作业(Job)
。JobMaster和具体的 Job 是一一对应的,多个 Job 可以同时运行在一个 Flink 集群中,每个Job都有一个自己的 JobMaster
。
- 在作业提交时,JobMaster 会先接收到要执行的应用。JobMaster 会把JobGraph转换成一个物理层面的数据流图,这个图被叫作
“执行图”(ExecutionGraph
),它包含了所有可以并发执行的任务。 - JobMaster 会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。
而在运行过程中 , JobMaster 会负责所有需要中央协调的操作。
(2)资源管理器(ResourceManager)
ResourceManager 主要负责资源的分配和管理
,在 Flink 集群中只有一个。所谓“资源”,主要是指 TaskManager 的任务槽(task slots
)。任务槽就是 Flink 集群中的资源调配单元
,包含了机器用来执行计算的一组 CPU 和内存资源。每一个任务(Task)都需要分配到一个slot上执行
。
(3)分发器(Dispatcher)
Dispatcher 主要负责提供一个 REST 接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的 JobMaster 组件
。Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。
2)任务管理器(TaskManager)
TaskManager 是 Flink 中的工作进程
,数据流的具体计算就是它来做的。Flink集群中必须至少有一个TaskManager;每一个 TaskManager 都包含了一定数量的任务槽(taskslots)。Slot 是资源调度的最小单位,slot 的数量限制了 TaskManager 能够并行处理的任务数量。
启动之后,TaskManager 会向资源管理器注册它的 slots
;收到资源管理器的指令后,TaskManager 就会将一个或者多个槽位提供给 JobMaster 调用,JobMaster 就可以分配任务来执行了。 在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的TaskManager交换数据。
核心概念
1)并行度(Parallelism)
(1)并行子任务和并行度
Flink 执行过程中,每一个算子(operator)可以包含一个或多个子任务(operatorsubtask)
,这些子任务在不同的线程、不同的物理机或不同的容器中完全独立地执行。
一个特定算子的子任务(subtask)的个数
被称之为其并行度(parallelism)
。包含并行子任务的数据流,就是并行数据流
。
一个流程序的 并行度
,可以认为就是其 所有算子中最大的并行度
。
上图数据流中有 source、map、window、sink 四个算子,其中sink算子的并行度为 1,其他算子的并行度都为 2。所以这段流处理程序的并行度就是2。
(2)并行度的设置
在 Flink 中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。
- 直接代码设置
代码中在算子后跟着调用 setParallelism()方法
,来设置当前算子的并行度:
stream.map(word -> Tuple2.of(word, 1L)).setParallelism(2);
调用执行环境的 setParallelism()方法
,全局设定并行度:
env.setParallelism(2);
这样代码中所有算子,默认的并行度就都为 2 。
调试可以使用本地环境,自带Web UI便于调试(默认8081端口):
需要添加如下依赖:
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-runtime-web</artifactId><version>${flink.version}</version><scope>provided</scope></dependency>
注意
:keyBy 不是算子,所以无法对 keyBy 设置并行度。
- 提交应用时设置
-p 参数来指定当前应用程序执行的并行度
,它的作用类似于执行环境的全局设置:
bin/flink run -m 192.168.197.130:8081 -p 2 -c com.lkl.StreamSocketWordCount ../day5-flink-1.0-SNAPSHOT.jar
在 Web UI 上提交作业,也可以在对应输入框中直接添加并行度。
- 配置文件中设置
直接在集群的配置文件 flink-conf.yaml 中直接更改默认并行度:
parallelism.default: 2
初始值为1。
在没有指定并行度的时候,就会采用配置文件中的集群默认并行度。在开发环境中
,没有配置文件,默认并行度就是当前机器的CPU核心数
。
并行度设置优先级
:
代码:算子 > 代码:env > 提交时指定 > 配置文件
2)算子链(Operator Chain)
(1)算子间的数据传输
一个数据流在算子之间传输数据的形式可以是一对一(one-to-one)的直通(forwarding)
模式,也可以是打乱的重分区(redistributing)
模式,具体是哪一种形式,取决于算子的种类。
1. 一对一(One-to-one,forwarding)
图中的source 和map算子,source 算子读取数据之后,可以直接发送给 map 算子做处理,它们之间不需要重新分区
,也不需要调整数据的顺序
。map 算子的子任务,看到的元素个数和顺序跟source算子的子任务产生的完全一样,保证着“一对一”的关系。map、filter、flatMap等算子都是这种one-to-one的对应关系
。这种关系类似于 Spark 中的窄依赖
。
2. 重分区(Redistributing)
这种模式,数据流的分区会发生改变。比如图中的map和后面的keyBy/window算子之间,以及 keyBy/window 算子和 Sink 算子之间,都是这样的关系。
每一个算子的子任务,会根据数据传输的策略,把数据发送到不同的下游目标任务
。这些传输方式都会引起重分区的过程,这一过程类似于 Spark 中的shuffle
。
(2)合并算子链
并行度相同的一对一(one to one)算子操作,可以直接链接在一起形成一个“大”的任务(task)
,这样原来的算子就成为了真正任务里的一部分,如下图所示。每个task 会被一个线程执行。这样的技术被称为“算子链”(Operator Chain)
。
将算子链接成 task
是非常有效的优化:可以减少线程之间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量
。
Flink 默认会按照算子链的原则进行链接合并,如果想要禁止合并或者自行定义,也可以在代码中对算子做一些特定的设置:
// 禁用算子链
.map(word -> Tuple2.of(word, 1L)).disableChaining();
// 从当前算子开始新链
.map(word -> Tuple2.of(word, 1L)).startNewChain()
禁用算子链,当前算子与前后算子都不能组成算子链。(一般不会禁用)
3)任务槽(Task Slots)
(1)任务槽(Task Slots)
Flink 中每一个 TaskManager 都是一个 JVM 进程
,它可以启动多个独立的线程
,来并行执行多个子任务(subtask)。
TaskManager 的计算资源是有限的,并行的任务越多,每个线程的资源就会越少。
为了控制并发量
,需要在TaskManager 上对每个任务运行所占用的资源做出明确的划分,这就是所谓的任务槽(taskslots)
。
每个任务槽(task slot)其实表示了 TaskManager 拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的。
独立内存不独立CPU(时间片轮转)
(2)任务槽数量的设置
在 Flink 的 flink-conf.yaml
配置文件中,可以设置TaskManager 的 slot 数量,默认是 1 个 slot。
taskmanager.numberOfTaskSlots: 8
slot 目前仅仅用来隔离内存,不会涉及 CPU 的隔离
。在具体应用时,可以将 slot 数量配置为机器的 CPU 核心数
,尽量避免不同任务之间对CPU的竞争。
(3)任务对任务槽的共享
在同一个作业
中,不同任务节点(算子)的并行子任务
,就可以放到同一个slot上
执行。
对于第一个任务节点source→map,它的 6 个并行子任务必须分到不同的 slot 上,而第二个任务节点keyBy/window/apply的并行子任务却可以和第一个任务节点共享 slot。
将资源密集型和非密集型的任务同时放到一个 slot 中,它们就可以自行分配对资源占用的比例,从而保证最重的活平均分配给所有的 TaskManager
。
slot 共享另一个好处就是允许保存完整的作业管道。即使某个TaskManager 出现故障宕机,其他节点也可以完全不受影响,作业的任务可以继续执行。
Flink 默认是允许 slot 共享的,如果希望某个算子对应的任务完全独占一个slot,或者只有某一部分算子共享 slot,也可以通过设置“slot 共享组”手动指定:(默认都是default)
.map(word -> Tuple2.of(word, 1L)).slotSharingGroup("aaa");
只有属于同一个 slot 共享组的子任务,才会开启 slot 共享;不同组之间的任务是完全隔离的,必须分配到不同的 slot 上
。
4)任务槽和并行度的关系
任务槽是静态的概念
, 是指 TaskManager 具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots 进行配置;而并行度是动态概念
,也就是TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置。
注意
:
slot数量 >= job并行度(算子最大并行度),job才能运行【否则无法提交任务】
如果是yarn模式,动态申请
申请TM数量 = job并行度 / 每个TM的slot数,向上取整
例如session模式,刚开始0个TaskMananger(设置为3个slot),0个slot
此时,提交一个job并行度为10
10 / 3 向上取整,申请4个TM,使用10个slot,还剩余2个slot
相关文章:

【入门Flink】- 05Flink运行时架构以及一些核心概念
系统架构 Flink运行时架构Standalone会话模式为例 1)作业管理器(JobManager) JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…...

网络协议的基本概念
网络协议的基本概念 随处可见的协议 在计算机网络与信息通信领域里,人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。 “计算机网络体系结构”将这些网络协议进行了系统归纳。TCP/IP就是IP、TCP、HTTP等协议的集合。现在࿰…...

广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验
今年5月21日,中国智电新能源旗舰MPV——广汽传祺智电新能源E9在北京人民大会堂举办上市发布会。 发布会现场(图源官方) 为了让更多的消费者能够在线上感受到广汽传祺E9的魅力,3DCAT实时渲染云与大圣科技合作为广汽传祺打造了一款…...

resource manager attributes structure(iofunc_attr_t) 扩展实例
文章目录 前言一、attributes structure(iofunc_attr_t)是什么二、iofunc_attr_t 扩展实例1. iofunc_attr_t 未扩展前的使用实例2. iofunc_attr_t 扩展后的使用实例总结参考资料前言 本文主要介绍如何扩展 QNX resource manager 的 attributes structure(iofunc_attr_t) 属性数…...

劳易测扫码条码分段读取实现方法
添加如下3个功能块:M10,M13和M27 设置BCL参数:Code type 1 为Code128 参数:Mode为Range 参数:Number Of digits 1 为条码最小长度 Number Of digits 2 为条码最大长度。 设置M10:Mode(With …...

【Linux】Nignx及负载均衡动静分离
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯Ἲ…...

AI:50-基于深度学习的柑橘类水果分类
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

mysql 中!= 到底走不走索引?
mysql 中! 到底走不走索引? 很多人疑惑! 到底走不走索引, 这里可以肯定的说该操作是可以走索引的,但实际情况中都为啥都不走索引呢? 首先我们要知道走索引与数据量和数据趋势(cardinality)有很大的关系&…...

4 sql语法基础
1、DISTINCT 相同值只会出现一次。它作用于所有列,也就是说所有列的值都相同才算相同。 2、LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。 返回前 5 行: SELECT * FROM myt…...

网络工程师应知应会:基础知识(5)
一、防火墙区域结构 防火墙按安全级别不同,可划分为内网、外网和 DMZ 区。 (1) 内网。 内网是防火墙的重点保护区域,包含单位网络内部的所有网络设备和主机。该区域是可信的,内网发出的连接较少进行过滤和审计。 (2) 外网。 外网是防火墙重…...

Minio多节点多驱动分布式部署官网文档翻译
原文链接: Deploy MinIO: Multi-Node Multi-Drive — MinIO Object Storage for Linux The procedures on this page cover deploying MinIO in a Multi-Node Multi-Drive (MNMD) or “Distributed” configuration. MNMD deployments provide enterprise-grade p…...

python连接clickhouse (CK)
Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…...

【C++】内联函数一看就懂?
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

非洲“支付宝”PalmPay搭载OceanBase:成本降低80%
10 月 30 日,非洲支付公司PalmPay 的核心系统搭载国产自研数据库OceanBase,正式投入使用。PalmPay 也是 OceanBase 首个非洲商业用户。 作为一家非洲领先的金融科技公司,PalmPay 于 2019 年在尼日利亚推出电子钱包应用,其功能类似…...

EASYX图片操作
easyx学习网址 建议使用谷歌搜索引擎搜索相关的资料 eg1:图片显示到桌面 #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3…...

多测师肖sir_高级金牌讲师__adb命令
adb指令整理: ADB常用的指令: 查看当前连接设备 : adb devices 进入到shell : adb shell 查看日志 : adb logcat 安装apk文件 : adb install xxx.apk 卸载APP : adb uninstall 包名 查看包名 &…...

块级作用域的理解
块级作用于的概念 由一对花括号{}中的语句集都属于一个块,在这个{}里面包含的块内定义的所有变量在代码块外都是不可见的,因此称为块级作用域。 作用域永远都是任何一门语言的重中之中,因为它控制着变量和参数的可见性和生命周期。讲到这里&…...

【GitLab、GitLab Runner、Docker】GitLab CI/CD 应用
安装Gitlab开源版 官方文档-安装Gitlab 使用Docker安装 sudo docker run --detach \--hostname gitlab.example.com \--env GITLAB_OMNIBUS_CONFIG"external_url http://${ip}:9999/; gitlab_rails[gitlab_shell_ssh_port] 8822;" \--publish 443:443 --publish 99…...

Linux文本编辑器vim使用和配置详解
vim介绍 vim是Linux的一款文本编辑器,可以用来编辑代码,而且支持语法高亮,还可以进行一系列配置使vim更多样化。也可以运行于windows,mac os上。 vim有多种模式,但目前我们只介绍绝大多数场景用的到的模式&…...

港科夜闻|香港科大戴希教授被选为腾讯公司新基石研究员
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大戴希教授被选为腾讯公司“新基石研究员”。10月30日,作为目前国内社会力量资助基础研究力度最大的公益项目之一,“新基石研究员项目”揭晓了第二期获资助名单,来自13个城市28家…...

如何读懂深度学习python项目,以`Multi-label learning from single positive label`为例
Paper : Multi-label learning from single positive label Code 先读一读README.md 可能有意想不到的收获; 实验环境设置要仔细看哦! 读论文 如何读论文,Readpaper经典十问 (可能在我博客里有写) How to read a …...

【面试】Kafka基础知识
定义 Kafka是一个分布式基于发布/订阅模式的消息队列 优点 解耦:上下游之间依赖解耦。缓冲/削峰:生产消息的速度和消费消息的速度不一致时,可以起到缓冲作用。异步:天然的异步处理机制,生产者把消息(任务)放进队列&…...

【入门Flink】- 06Flink作业提交流程【待完善】
Standalone 会话模式作业提交流程 代码生成任务的过程: 逻辑流图(StreamGraph)→ 作业图(JobGraph)→ 执行图(ExecutionGraph)→物理图(Physical Graph)。 作业图算子链…...

Linux 上的轻量级浏览器
导读大多数 Linux 桌面环境中包含的基本图像查看器可能不足以满足你的需要。如果你想要一些更多的功能,但仍然希望它是轻量级的,那么看看这四个 Linux 桌面中的图像查看器,如果还不能满足你的需要,还有额外的选择。 当你需要的不…...

肆[4],滤波
1,简介 1.1,Opencv提供滤波处理函数 方框滤波,BoxBlur函数 均值滤波(领域平均滤波),Blur函数 高斯滤波,GaussianBlur函数 中值滤波,medianBlur函数 双边滤波,bilateralFilter函数 1.2&…...

Python 包管理器入门指南
什么是 PIP? PIP 是 Python 包管理器,用于管理 Python 包或模块。注意:如果您的 Python 版本是 3.4 或更高,PIP 已经默认安装了。 什么是包? 一个包包含了一个模块所需的所有文件。模块是您可以包含在项目中的 Pyth…...

2022年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 如下所示的2行代码,最后print()函数打印出来的结果是?( ) c [[赵大,…...

配置Raspberry自动连接WIFI,在无法查看路由器的校园网情况下使用自己电脑热点
1、开启电脑热点,并共享电脑WLAN2 打开控制面板->网络和Internet->网络连接 选择自己的校园网,我这里是WLAN2,右键属性,如下操作: 如果没有看到 本地连接*10类似的图标 则按如下操作:winx键&#x…...

#stm32整理(一)flash读写
以这篇未开始我将进行stm32学习整理为期一个月左右完成stm32知识学习整理内容顺序没有一定之规写到哪想到哪想到哪写到哪,主要是扫除自己知识上的盲区完成一些基本外设操作。 以stm32f07为例子进行flash读写操作 stm32flash简介 参考资料正点原子和野火开发手册 …...

windows10编译高版本openssl
参考文章 参考文章中的windows编译为低版本,在高版本的openssl编译中已经没有:“ms\do_ms.bat”这个脚本了,现记录下编译过程 1、准备工作 安装ActivePerl,安装后会自动写入环境变量,参照参考文章测试安装成功与否&a…...