简单漂亮的博客php网站源码/网站排名查询alexa
前言
JobManager是Flink的核心进程,主要负责Flink集群的启动和初始化,包含多个重要的组件(JboMaster,Dispatcher,WebEndpoint等),本篇文章会基于源码分析JobManagr的启动流程,对其各个组件进行介绍,希望对JobManager有一个更全面的了解。
集群启动模式
ClusterEntryPoint是Flink集群的入口点的基类,该类是抽象类,类继承关系UML图如下
通过上图可知道,Flink有3种集群模式
Flink Session集群
根据不同的资源管理器,有3个不同的子类:
- StandaloneSessionClusterEntrypoint Standalone session模式下集群的入口类
- KubernetesSessionClusterEntrypoint K8s session模式下集群的入口类
- YarnSessionClusterEntrypoint Yarn session模式下集群的入口类
集群生命周期:
在 Flink Session 集群中,客户端连接到一个预先存在的、长期运行的集群,该集群可以接受多个作业提交。即使所有作业完成后,集群(和 JobManager)仍将继续运行直到手动停止 session 为止。因此,Flink Session 集群的寿命不受任何 Flink 作业寿命的约束。
资源隔离:
Flink作业共享集群的ResourceManager和Dispacher等组件,TaskManager slot 由 ResourceManager 在提交作业时分配,并在作业完成时释放。由于所有作业都共享同一集群,因此在集群资源方面存在一些竞争 — 例如提交工作阶段的网络带宽。此共享设置的局限性在于,如果 TaskManager 崩溃,则在此 TaskManager 上运行 task 的所有作业都将失败;类似的,如果 JobManager 上发生一些致命错误,它将影响集群中正在运行的所有作业。
适用场景:
因为组件共享,session集群资源使用率高,集群预先存在,不需要额外申请资源,适合一些比较小的,不是长期运行的作业,例如SQL预览,交互式查询,实时任务测试环境等
Flink Per Job集群
只要Yarn提供了继承的子类:YarnJobClusterEntrypoint
集群生命周期:
在 Flink Job 集群中,可用的集群管理器(例如 YARN)用于为每个提交的作业启动一个集群,并且该集群仅可用于该作业。一旦作业完成,Flink Job 集群将被拆除。
资源隔离:
每一个提交的Flink应用程序单独创建一套完整集群环境,该Job独享使用的计算资源和组件服务。
使用场景:
实时由于Per Job模式下用户应用程序的main方法在客户端执行生成JobGraph,任务量大情况下存在性能瓶颈,目前已被标记为废弃状态。
Flink Application集群
根据不同的资源管理器,有3个不同的子类:
- StandaloneApplicationClusterEntryPoint Standalone Application模式下集群的入口类
- KubernetesApplicationClusterEntrypoint K8s Application模式下集群的入口类
- YarnApplicationClusterEntryPoint Yarn Application模式下集群的入口类
集群生命周期:
Flink Application 集群是专用的 Flink 集群,仅从 Flink 应用程序执行作业,并且main方法在集群上而不是客户端上运行。应用程序逻辑和依赖打包成一个可执行的作业 JAR 中,并且集群入口(ApplicationClusterEntryPoint)负责调用main方法来提取 JobGraph
资源隔离:
每一个提交的Flink应用程序单独创建一套完整集群环境,该Job独享使用的计算资源和组件服务。
使用场景:
Application模式资源隔离性好,Per Job模式的替换方案,适合长期运行、具有高稳定性的大型作业
JobManager启动流程
JobManger启动流程在不同模式下基本相同,Standalone模式可以在本地运行(可以参考),方便Debug,因为使用Standalone模式的入口类StandaloneSessionClusterEntrypoint进行启动流程的分析。
main方法入口
public static void main(String[] args) {// 打印系统相关信息EnvironmentInformation.logEnvironmentInfo(LOG, StandaloneSessionClusterEntrypoint.class.getSimpleName(), args);//信号注册器,注册系统级别的信号,接收到系统级别终止信号优雅的关闭SignalHandler.register(LOG);//注册一个安全的钩子,这样jvm停止之前会睡眠5s去释放资源,5s之后强制关闭JvmShutdownSafeguard.installAsShutdownHook(LOG);// 解析命令行参数,获取配置信final EntrypointClusterConfiguration entrypointClusterConfiguration =ClusterEntrypointUtils.parseParametersOrExit(args,new EntrypointClusterConfigurationParserFactory(),StandaloneSessionClusterEntrypoint.class);//加载config.yaml,构建Configuration对象Configuration configuration = loadConfiguration(entrypointClusterConfiguration);StandaloneSessionClusterEntrypoint entrypoint =new StandaloneSessionClusterEntrypoint(configuration);ClusterEntrypoint.runClusterEntrypoint(entrypoint);
}
主要步骤:
- 打印系统信息。
- 注册信号处理器,注册系统级别的信号,确保优雅关闭。
- 注册一个安全的钩子,这样jvm停止之前会睡眠5s去释放资源,5s之后强制关闭。
- 解析命令行参数,加载配置文件。
- 初始化
StandaloneSessionClusterEntrypoint
。 - 调用
ClusterEntrypoint#runClusterEntrypoint
方法启动集群。
ClusterEntrypoint#runClusterEntrypoint
public static void runClusterEntrypoint(ClusterEntrypoint clusterEntrypoint) {final String clusterEntrypointName = clusterEntrypoint.getClass().getSimpleName();
try {//clusterEntrypoint.startCluster();
} catch (ClusterEntrypointException e) {LOG.error(String.format("Could not start cluster entrypoint %s.", clusterEntrypointName),e);System.exit(STARTUP_FAILURE_RETURN_CODE);
}//无关代码 无需关注
}
核心步骤:
- 调用
clusterEntrypoint.startCluster()
启动集群。
ClusterEntrypoint#startCluster
public void startCluster() throws ClusterEntrypointException {//无关代码 无需关注try {FlinkSecurityManager.setFromConfiguration(configuration);//插件管理类,用来加载插件。插件加载两种方式。//1).通过如下参数配置FLINK_PLUGINS_DIR。//2).将插件jar包放入到plugins下PluginManager pluginManager =PluginUtils.createPluginManagerFromRootFolder(configuration);//初始化文件系统的配置configureFileSystems(configuration, pluginManager);//初始化安全上下文环境 默认HadoopSecurityContext,Hadoop安全上下文,//使用先前初始化的UGI(UserGroupInformation)和适当的安全凭据。比如Kerberos。//总结:初始化安全环境,创建安全环境的时候会做一系列的检查。SecurityContext securityContext = installSecurityContext(configuration);ClusterEntrypointUtils.configureUncaughtExceptionHandler(configuration);//安全的情况下调用runCluster开始初始化组件securityContext.runSecured((Callable<Void>)() -> {runCluster(configuration, pluginManager);return null;});} catch (Throwable t) {//异常处理代码 无需关注}}
startCluster方法主要做了一些环境和配置初始化的工作
主要步骤:
- 初始化插件管理器,用来加载插件。
- 初始化文件系统设置 例如 hdfs、本地file。此时只是初始化的配置。
- 初始化安全环境。
- 安全环境下调用
runCluster
方法。
ClusterEntrypoint#runCluster
private void runCluster(Configuration configuration, PluginManager pluginManager)throws Exception {synchronized (lock) {//初始化集群所需要的服务:例如通信服务,监控服务,高可用服务等initializeServices(configuration, pluginManager);// write host information into configurationconfiguration.set(JobManagerOptions.ADDRESS, commonRpcService.getAddress());configuration.set(JobManagerOptions.PORT, commonRpcService.getPort());//创建Dispatcher和ResourceManger组件的工厂类final DispatcherResourceManagerComponentFactorydispatcherResourceManagerComponentFactory =createDispatcherResourceManagerComponentFactory(configuration);//创建Dispatcher和ResourceManger组件clusterComponent =dispatcherResourceManagerComponentFactory.create(configuration,resourceId.unwrap(),ioExecutor,commonRpcService,haServices,blobServer,heartbeatServices,delegationTokenManager,metricRegistry,executionGraphInfoStore,new RpcMetricQueryServiceRetriever(metricRegistry.getMetricQueryServiceRpcService()),failureEnrichers,this);//组件停止运行后的异步方法clusterComponent.getShutDownFuture().whenComplete(//代码省略)}}
主要步骤:
1.初始化集群所需要的服务:例如通信服务,监控服务,高可用服务等
2.创建Dispatcher和ResourceManger组件的工厂类
3.创建Dispatcher和ResourceManger组件
4.定义组件停止运行后的异步方法
总结
本篇文章分享了Flink任务的集群模式,通过源码的方式分析了JobManger的启动流程,后续会对JobManger相关的服务和组件进行更详细的分析。
相关文章:

深度了解flink(七) JobManager(1) 组件启动流程分析
前言 JobManager是Flink的核心进程,主要负责Flink集群的启动和初始化,包含多个重要的组件(JboMaster,Dispatcher,WebEndpoint等),本篇文章会基于源码分析JobManagr的启动流程,对其各个组件进行介绍&#x…...

PostgreSQL 约束
PostgreSQL 约束 介绍 PostgreSQL 是一种功能强大的开源对象关系数据库系统,它提供了多种约束来确保数据的完整性和一致性。约束是数据库规则,用于限制表中数据的类型和操作。在 PostgreSQL 中,约束可以分为几种类型,包括主键约…...

【Redis】
1、Redis 概述 远程字典服务器(Remote Dictionary Server,Redis):一个开源的、高性能的、轻量级、使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,通过提供多种键值数据类型来试音不同场景下的缓…...

大厂面试真题-MVCC有哪些不好
MVCC(Multi-Version Concurrency Control,多版本并发控制)虽然具有提高数据库并发性能、避免脏读等优势,但也存在一些缺点。以下是对MVCC缺点的详细归纳: 一、存储开销增加 MVCC需要为每个数据行存储多个版本&#x…...

一篇教你多排轮播效果
多排轮播 提示:demo案例 效果看看把 这些都是可以单独左右滑动的 文章目录 多排轮播前言一、上才艺总结 前言 今天想着想着 看着别人这样 哎还挺好看,就自己弄了 提示:以下是本篇文章正文内容,下面案例可供参考 一、上才艺 &…...

安全警告您正在访问危险网站怎么关闭
在上网时,很多人可能遇到过“安全警告:您正在访问危险网站”的提示。这类警告通常由浏览器或安全软件自动弹出,旨在保护用户免受钓鱼网站、恶意软件等潜在安全威胁的侵害。这篇文章将带您了解这种安全警告的来源、关闭提示的步骤以及应采取的…...

群控系统服务端开发模式-应用开发-业务架构逻辑开发第一轮测试
整个系统的第一个层次已经开发完毕,已经有简单的中控,登录、退出、延迟登录时长、黑名单、数据层封装、验证层封装、RSA加解密、Redis等功能,还缺获取个人、角色按钮权限、角色菜单权限功能。角色按钮权限以及角色菜单权限等明后天开发&#…...

git 怎么保留某个文件夹忽略其下面的所有文件?
在 Git 中,如果你想要保留某个文件夹(比如 folder/)但忽略其下面的所有文件,可以使用 .gitignore 文件来实现。需要注意的是,Git 不会自动创建空目录。因此,为了让 Git 记录这个空目录,你需要在…...

Linux Shell 实现一键部署mariadb11.6
mariadb MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius主导开发…...

Servlet 3.0 注解开发
文章目录 Servlet3.0注解开发修改idea创建注解的servlet模板内容讲解 关于servlet3.0注解开发的疑问_配置路径省略了属性urlPatterns内容讲解内容小结 Servlet3.0注解开发 【1】问题 说明:之前我们都是使用web.xml进行servlet映射路径的配置。这样配置的弊端&…...

rom定制系列------红米note8_miui14安卓13定制修改固件 带面具root权限 刷写以及界面预览
💝💝💝红米note8机型代码:ginkgo。高通芯片。此固件官方最终版为稳定版12.5.5安卓11的版本。目前很多工作室需要高安卓版本的固件来适应他们的软件。并且需要root权限。根据客户要求。修改固件为完全root。并且修改为可批量刷写的…...

Kaspa钱包ts代码封装
文章目录 1. 配置wasm2. 钱包地址创建3. KAS转账&余额查询4. KRC-20 处理5. 使用demo 1. 配置wasm 下载wasm地址:https://kaspa.aspectron.org/nightly/downloads/ 在项目根目录下添加wasm目录, 将下载的wasm文件中web目录下kaspa和kaspa-dev文件家…...

MySQL 数据库中 MyISAM 和 InnoDB 的区别:深入解析
MySQL 是目前最流行的开源数据库管理系统之一,支持多种存储引擎,其中最常用的就是 MyISAM 和 InnoDB。这两种存储引擎各有其特点,适用于不同的使用场景。理解它们之间的区别有助于数据库开发者和管理者根据应用需求选择合适的存储引擎。本文将…...

python中怎样实现闭包?
在Python中,闭包是指一个函数可以访问其自身范围之外的变量,即可以访问其外部函数作用域中的变量。要实现一个闭包,可以按照以下步骤进行: 内部函数引用外部函数的变量:在外部函数中定义一个内部函数,并在…...

论文阅读:MultiUI 利用网页UI进行丰富文本的视觉理解
《HARNESSING WEBPAGE UIS FOR TEXT-RICH VISUAL UNDERSTANDING》 利用网页UI进行丰富文本的视觉理解 总结 grounding和QA部分的数据集占比较大、同时消融实验显示其作用相对较大,并且grounding部分作用和效果呈现scaling正相关提供了很多web数据处理成多模态训练…...

【云原生】云原生后端详解:架构与实践
目录 引言一、云原生后端的核心概念1.1 微服务架构1.2 容器化1.3 可编排性1.4 弹性和可伸缩性 二、云原生后端的架构示意图三、云原生后端的最佳实践3.1 使用服务网格3.2 监控与日志管理3.3 CI/CD 流水线3.4 安全性 总结参考资料 引言 随着云计算的迅猛发展,云原生…...

MySQL覆盖索引
覆盖索引(Covering Index)是数据库优化中的一种重要技术 覆盖索引是指一个查询语句在执行时,所需的数据可以完全通过索引来获取,而无需访问实际的数据行。也就是说,查询语句所需的列都包含在了创建的索引中,…...

「C/C++」C/C++ 之 循环结构详解
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

json-server的基本使用
一、json-server工具的使用 可以快速的搭建符合RESTful API服务。返回符合RESTful规范的数据; 1、全局引入json-server包 npm install -g json-server2、创建json格式的db.json文件 {"jsonData": [{"name": "小明"}] }3、在json文…...

华为配置BFD状态与接口状态联动实验
组网图形 图1 配置BFD状态与接口状态联动组网图 BFD简介配置注意事项组网需求配置思路操作步骤配置文件 BFD简介 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施&…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22目录1. PoisonedRAG: Knowledge corruption attacks to retrieval-augmented generation of large language models摘要创新点…...

理解消息队列
消息队列(Message Queue)有下面四大作用: 解耦。几个业务系统之间可以通过 MQ 解耦,例如做数据同步数据的顺序性和可恢复性异步通讯缓冲能力 理解 MQ MQ 的前两个特点且不说,我们看看另外两个的。 异步通讯&#x…...

!什么,matlab也有网页版了
已经脱离matlab一下下几天的困境了,是的,matlab也有网页版了 附上网址: MATLAB Login | MATLAB & Simulink...

安卓屏幕息屏唤醒
背景,今天遇项目需要,需要在下载在后台任务运行时(如下载、上传或进行长时间计算),保持 CPU 活动,然后就写了这个实现方法,废话不多说上代码 第一步,再清单AndroidManifest文件声明权…...

类文件具有错误的版本 61.0, 应为 55.0
启动项目的时候报这个错误. 项目所使用的redis版本是jdk17的,而我使用的是Java11.所以要将redis版本降下来。 另一种方式就是修改jdk的版本,在设置修改编译版本,在版本控制里面修改jdk的版本。...

vue点击菜单,出现2个相同tab,啥原因
点击菜单,出现相同的tab 出现的原因: 1.组件中的name 和配置路由文件js, 的大小写不一致导致 2、跳转的路由整个地址,大小写不一致大致...

【网络原理】——图解HTTPS如何加密(通俗简单易懂)
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:HTTP为什么不安全 二:HTTPS加密过程 1:密码学中的概念 &…...

CentOS 修改服务器登录密码的完整指南
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱…...

【PnP】详细公式推导,使用DLT直接线性变换法求解相机外参
文章目录 🚀PnP1️⃣ 求解不考虑尺度的解2️⃣ 恢复解的尺度3️⃣ 另一种解法 🚀PnP PnP(Perspective-n-Point)是求解3D到2D点相机外参的算法。PnP算法有DLT直接线性变换、P3P三对点估计位姿、EPnP(Efficient PnP)、BA(Bundle Adjustment)光速法平差。这…...

怎样把书上的事件图改编成活动图-《分析模式》漫谈43
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》中模型图的UML改编,之前也有人做过,Martin Fowler网站上给出了部分改编成果。 这些改编成果只覆盖了部分章节,而且只是把类型图&#…...