Flink 架构学习总结
Flink是一个分布式系统,要求有效地分配和管理计算资源以执行流式应用程序。它集成了所有常见的集群资源管理器,如Hadoop YARN和Kubernetes,但也可以设置为作为standalone甚至库运行。
本节概述了Flink的体系结构,并描述了其主要组件如何交互以执行应用程序以及从故障中恢复。
Flink集群解析
Flink运行时由两种类型的进程组成:一个JobManager和一个或多个TaskManager。
Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送到JobManager。之后,Client 可以断开连接(分离模式),或者保持连接以接收进度报告(附加模式)。Client 要么作为触发执行的Java/Scala程序的一部分运行,要么在命令行进程/bin/flink run ...中运行
JobManager和TaskManager可以通过各种方式启动:直接在机器上作为standalone启动,在容器中启动,或者由YARN等资源框架管理。TaskManager连接到JobManager,宣布自己可用,并被分配工作。
JobManager
JobManager 有许多与协调Flink应用程序的分布式执行相关的职责:它决定何时安排下一个任务(或一组任务),对已完成或执行失败的任务做出反应,协调检查点,并协调故障恢复等。该进程由三个不同的组件组成:
ResourceManager
ResourceManager 负责Flink 集群中的资源分配和供应,管理任务槽(task slots) --是Flink集群的资源调度单元。Flink为不同的环境和资源提供商(如YARN、Kubernetes和独立部署)实现了多个ResourceManager。在standalone设置中,ResourceManager 只能分配可用TaskManager的插槽,不能独立启动新的TaskManager。
Dispatcher
Dispatcher提供了一个REST接口来提交Flink应用程序以供执行,并为每个提交的Job启动一个新的JobMaster。同时,Dispatcher还运行Flink WebUI提供job执行信息
JobMaster
JobMaster负责管理单个JobGraph的执行。一个Flink cluster中可以同时运行多个job,每个job都有自己的JobMaster。
至少有一个JobManager。一个高可用性设置可能有多个JobManager,其中一个始终是leader,其他则是备用(standby)(请参阅高可用性(HA))。
TaskManager
TaskManager(也称为worker)执行数据流任务,缓冲和交换数据流。
必须始终至少有一个TaskManager。TaskManager中资源调度的最小单位是任务槽(task slot)。任务槽的数量表示并发处理任务的数量。请注意,可能在一个任务槽中执行多个Operator
Task和算子(Operator)链
对于分布式执行,Flink 将算子的 subtasks 链接成 tasks。每个task由一个线程执行。将将operator链接成task是一种有用的优化:它减少了线程切换和缓冲的开销,并在降低延迟的同时提高了整体吞吐量。可以配置链接行为;请参阅chaining docs查看详细信息。
下图中的示例数据流由五个Subtask执行,因此由五个并行线程执行
Task Slot(任务槽)和资源
每个worker(TaskManager)都是一个JVM进程,可以在单独的线程中执行一个或多个子任务。为了控制单个TaskManager接受的任务数,就有了所谓的task slot(至少一个)。
每个 task slot 表示TaskManager的固定资源子集。例如,具有三个slot 的TaskManager会将其托管内存的1/3专用于每个插槽。划分资源意味着subtask不会与其他作业的subtask争夺托管内存,而是有一定数量的保留托管内存。请注意,这里没有进行CPU隔离;当前slot仅隔离任务的托管内存。
通过调整task slot 的数量,用户可以定义如何将subtask彼此隔离。每个TaskManager有一个slot 意味着每个任务组都在一个单独的JVM中运行(例如,可以在一个独立的容器中启动)。拥有多个slot 意味着更多的subtask共享同一JVM。同一JVM中的任务共享TCP连接(通过多路复用)和心跳消息。它们还可以共享数据集和数据结构,从而减少每个任务的开销。
默认情况下,Flink允许subtask共享slot ,即使它们是不同task的subtask ,只要来自同一job即可。结果就是,一个slot可以容纳job的整个管道。允许这种“slot共享”有两个主要好处:
- Flink集群所需task slot与job使用的最大并行度保持一样。不需要计算一个程序总共包含多少任务(具有不同的并行度)。
- 更容易获得更好的资源利用率。如果没有“slot共享”,非密集型subtask(source/map()) 将阻塞与资源密集型 subtask(window)一样多的资源。通过“slot共享”,将示例中的基本并行度从两个增加到六个,可以充分利用slot资源,同时确保繁重的subtask在TaskManager之间公平分配。
Flink 应用程序执行
- 集群生命周期: Flink应用集群是一个专用的Flink集群,它只执行来自一个Flink应用的job,并且
main()方法在集群上运行,而不是在client运行。job提交是一个一步到位的过程: 你不需要先启动Flink集群,然后向现有集群会话提交job ,相反,你将应用程序逻辑和依赖项打包到一个可执行的作业JAR包中,集群入口点(ApplicationClusterEntryPoint) 负责调用main()方法来提取JobGraph。这允许你像Kubernetes上的任何其他应用程序一样部署Flink应用程序。Flink应用程序集群的生命周期因此与Flink应用的生命周期绑定。 - 资源隔离: 在Flink应用集群中,ResourceManager和Dispatcher的作用域为一个Flink应用,它提供了比Flink会话集群更好的隔离。
Flink Session集群
- 集群生命周期: 在Flink会话集群中,客户端连接到一个预先存在的、长期运行的集群,该集群可以接受多个job提交。即使在所有job完成后,集群(和JobManager) 仍将继续运行,直到手动停止会话。因此,Flink会话集群的生存期不与任何Flink job的生存期绑定。
- 资源隔离: TaskManager slot由ResourceManager在提交job时分配,并在job完成后释放。因为所有作业都共享同一个集群,所以在提交job阶段存在一些集群资源竞争,比如网络带宽。这种共享设置的一个限制是,如果一个TaskManager崩溃,那么所有在该TaskManager上运行任务的job都将失败;类似的,如果JobManager上发生一些致命错误,它将影响集群中运行的所有job。
- 其他注意事项: 拥有预先存在的集群可以节省大量申请资源和启动TaskManager的时间。在job的执行时间非常短,且启动时间过长会对端到端用户体验产生负面影响的情况下,这一点很重要——短查询的交互式分析就是这样,希望job可以使用现有资源快速执行计算。
以前,Flink会话集群也称为session mode下的Flink集群。
参考链接
https://nightlies.apache.org/flink/flink-docs-master/docs/concepts/flink-architecture/
Flink 架构学习总结的更多相关文章
- 3、flink架构,资源和资源组
一.flink架构 1.1.集群模型和角色 如上图所示:当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager.由 Client 提交任务给 JobMa ...
- 【从零开始学BPM,Day1】工作流管理平台架构学习
[课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第一天课程] Step 1 软件下载:H3 BPM10.0全开 ...
- Mybatis架构学习
Mybatis架构学习 MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架.MyBatis 封装了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.可以对配置和原生Map使用 ...
- ABP架构学习系列一 整体项目结构及目录
本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zha ...
- ABP架构学习系列
ABP实践学习系列 ABP Zero 本地化语言的初始化和扩展 ABP Zero 导航菜单之角色权限 ABP Zero示例项目问题总结 ABP后台服务之作业调度Quartz.NET ABP架构学 ...
- 1-4-bootloader架构学习
1-4-bootloader架构学习 1.一般情况下嵌入式 Linux 系统中的软件主要分为以下几部分: 1) 引导加载程序:其中包括内部 ROM 中的固化启动代码和 BootLoader 两部分. ...
- 彻底明白Flink系统学习5:window、Linux本地安装Flink
http://www.aboutyun.com/thread-26393-1-1.html 问题导读 1.如何在window下安装Flink? 2.Flink本地安装启动命令与原先版本有什么区别? 3 ...
- flink架构介绍
前言 flink作为基于流的大数据计算引擎,可以说在大数据领域的红人,下面对flink-1.7的架构进行逻辑上的分析并和spark做了一些关键点的对比. 架构 如图1,flink架构分为3个部分,cl ...
- ZT Android4.2蓝牙基础架构学习
Android4.2蓝牙基础架构学习 分类: Jellybean Bluetooth Bluetooth 2013-10-13 23:58 863人阅读 评论(3) 收藏 举报 androidblue ...
- Flink架构分析之Standalone模式启动流程
概述 FLIP6 对Flink架构进行了改进,引入了Dispatcher组件集成了所有任务共享的一些组件:SubmittedJobGraphStore,LibraryCacheManager等,为了保 ...
随机推荐
- Hugging Face x LangChain: 全新 LangChain 合作伙伴包
我们很高兴官宣发布 langchain_huggingface ,这是一个由 Hugging Face 和 LangChain 共同维护的 LangChain 合作伙伴包.这个新的 Python 包旨 ...
- nginx基础安装使用和负载均衡高可用,日志切割配置
1. Nginx简介 Nginx [engine x]是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器,最初由Igor Sysoev编写.很长一段时间以来,它已经在许多重负 ...
- golang import 导入的四种方式
1 标准导入: import "package_name" 2 导入别名: import ( alias "package_name" ) 3 匿名导入: _ ...
- SwiftUI Stack中的View被压缩的效果
一.背景 我们在布局中,经常会遇到视图元素排列时空间不足或者空间过大的情况,在这种场景下面,不同的布局方式有不同的方法: 绝对布局frame:纯靠计算过程控制,获取父视图的大小,根据需求,计算自己需要 ...
- RTMP协议中的Chunk Stream ID (CID)的作用
一.协议分层 RTMP包是以Message的结构封装的,结构如下所示: 1)Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需 ...
- 面试必会->Redis篇
01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 : 使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些 ...
- LeetCode 682. Baseball Game 棒球比赛(C++/Java)
题目: You're now a baseball game point recorder. Given a list of strings, each string can be one of th ...
- FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成
FlashDuty:一站式告警响应平台,前往此地址免费体验! 值班管理 UI 交互优化 [个人日程]从头像下拉菜单调整到值班列表页面,快速查看个人值班日程 [值班列表]支持原地预览最近一周值班情况,包 ...
- MySQL入门到实战详细教程
MySQL介绍 MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品,它广泛应用于各种Web应用程序和网站,MySQL使用结构化查 ...
- 海量数据处理利器 Roaring BitMap 原理介绍
作者:来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用,分别主要介绍了Roaring BitMap的存储方式及三种c ...