深度了解flink(九) JobManager(3) HA分析

HA核心类、接口

HighAvailabilityServices

HighAvailabilityServices是HA Service的核心接口,具体功能如下:

1.定义了高可用组件(Dispatcher、ResourceManager等)的leader选举接口和leader获取接口

2.检查点元数据的持久:将检查点的元数据存储到持久化存储中,以便在系统重启或故障恢复时能够恢复状态。

3.注册最新的完成检查点:记录最新的完成检查点,以便在需要时能够快速恢复到该检查点的状态。

4.BLOB 存储的持久化:将大对象(BLOB)数据存储到持久化存储中,确保数据不会因系统重启而丢失。

5.标记作业状态的注册表:维护一个注册表,记录每个作业的状态(如运行中、已完成、失败等),以便进行状态管理和监控。

6.RPC 端点的命名:为远程过程调用(RPC)端点分配唯一的名称,以便在分布式系统中进行通信和调用。

HighAvailabilityServices的UML类图如下:

有两个实现类:

AbstractHaServices

不具有高可用服务的haService

AbstractNonHaServices

提供具有高可用的haService

HA Service初始化流程
ClusterEntry#initializeServices

ClusterEntry#initializeServices进行了集群启动前服务初始化工作,其中也初始化了高可用服务

haServices = createHaServices(configuration, ioExecutor, rpcSystem);
HighAvailabilityServicesUtils.createHighAvailabilityServices

调用createHaServices->会调用HighAvailabilityServicesUtils.createHighAvailabilityServices工具类的方法进行高可用服务的创建

public static HighAvailabilityServices createHighAvailabilityServices(Configuration configuration,Executor executor,AddressResolution addressResolution,RpcSystemUtils rpcSystemUtils,FatalErrorHandler fatalErrorHandler)throws Exception {//获取ha模式,默认是NONE,可选项有ZOOKEEPER和KUBERNETES或者自定义,如果为NONE不开启高可用HighAvailabilityMode highAvailabilityMode = HighAvailabilityMode.fromConfig(configuration);//根据高可用mode返回对应的haService的实现类switch (highAvailabilityMode) {case NONE:final Tuple2<String, Integer> hostnamePort = getJobManagerAddress(configuration);//省略return new StandaloneHaServices(resourceManagerRpcUrl, dispatcherRpcUrl, webMonitorAddress);case ZOOKEEPER:return createZooKeeperHaServices(configuration, executor, fatalErrorHandler);case KUBERNETES:return createCustomHAServices("org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory",configuration,executor);case FACTORY_CLASS:return createCustomHAServices(configuration, executor);default:throw new Exception("Recovery mode " + highAvailabilityMode + " is not supported.");}}

步骤:

1.通过配置获取高可用的模式

2.根据模式创建对应的haService的实现类

Leader获取

LeaderRetrievalListener
public interface LeaderRetrievalListener {void notifyLeaderAddress(@Nullable String leaderAddress, @Nullable UUID leaderSessionID);void handleError(Exception exception);
}

LeaderRetrievalListener接口主要服务于当Leader地址修改了,会触发接口中的notifyLeaderAddress(LeaderRetrievalService内部持有该接口的对象实例),方法功能,

1.notifyLeaderAddress Leader地址选举后(第一次,或者Leander变更)会调用该方法

2.handleError 出现异常时会调用该方法

LeaderRetrievalService
public interface LeaderRetrievalService {/*** Starts the leader retrieval service with the given listener to listen for new leaders. This* method can only be called once.** @param listener The leader retrieval listener which will be notified about new leaders.* @throws Exception*/void start(LeaderRetrievalListener listener) throws Exception;/*** Stops the leader retrieval service.** @throws Exception*/void stop() throws Exception;
}

LeaderRetrievalService是Flink中一个重要的接口,它主要用于在leader变更时收到通知,并回调注册的LeaderRetrievalListener,方法,

1.start:开始监听Leader,该方法之启动一次

2.stop:停止监听

Leader 选举

LeaderElectionService
public interface LeaderElectionService {/*** Creates a new {@link LeaderElection} instance that is registered to this {@code* LeaderElectionService} instance.** @param componentId a unique identifier that refers to the stored leader information that the*     newly created {@link LeaderElection} manages.*/LeaderElection createLeaderElection(String componentId);
}

1.选举服务接口,它允许在一组参选者中选出一个领导者

2.createLeaderElection 创建DefaultLeaderElection,DefaultLeaderElection才会进行具体的选举操作

LeaderElection
public interface LeaderElectionService {/*** Creates a new {@link LeaderElection} instance that is registered to this {@code* LeaderElectionService} instance.** @param componentId a unique identifier that refers to the stored leader information that the*     newly created {@link LeaderElection} manages.*/LeaderElection createLeaderElection(String componentId);
}

1.LeaderElection 是LeaderElectionService和LeaderContender之间的代理

2.startLeaderElection启动选举者 将LeaderContender作为参数

3.confirmLeadership选举成功后会调用该方法

4.hasLeadership判断是否拥有指定session下的leadership

5.close停止高可用选举等服务

LeaderContender

参选者,组件必须实现了该接口才能进行Leader选举(WebMonitorEndpoint、ResourceManagerServiceImpl)

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

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

相关文章

爱普生SG-8101CA可编程晶振应用在工业自动化机器人

在工业自动化的浪潮中&#xff0c;机器人无疑是最耀眼的明星&#xff0c;它们以高效、精准的工作能力重塑了现代工业生产的格局。而在这些工业自动化机器人的核心深处&#xff0c;爱普生 SG - 8101CA 可编程晶振就像一颗强大而稳定的心脏&#xff0c;为机器人的卓越表现提供了坚…

【HarmonyOS】引导用户跳转APP设置详情页开启权限

【HarmonyOS】引导用户跳转设置APP详情页开启权限 前言 众所周知在鸿蒙应用中&#xff0c;向用户申请权限时&#xff0c;会弹出系统请求授权的弹框。当用户拒绝了你申请的权限&#xff0c;弹框会直接关闭。当下次触发同样的权限申请&#xff0c;会直接返回失败&#xff0c;不…

【大数据学习 | HBASE】hbase的原理与组成结构

1. hbase的简述 hbase作为google的大数据三篇比较重要的论文之一&#xff0c;它的起源叫做bigtable&#xff0c;意思非常简单就是大表的意思&#xff0c;是一个分布式存储很多数据的大型表格系统&#xff0c;它是对于hdfs中的数据不能直观查询和随机读写的病痛的一个补充和完善…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…

再探“构造函数”(2)友元and内部类

文章目录 一. 友元‘全局函数’作友元‘成员函数’作友元‘类‘作友元 内部类 一. 友元 何时会用到友元呢&#xff1f; 当想让&#xff08;类外面的某个函数/其它的类&#xff09;访问 某个类里面的(私有或保护的)内容时&#xff0c;可以选择使用友元。 友元提供了一种突破&a…

(新)docker desktop镜像迁移

背景 docker desktop默认安装在系统c盘&#xff0c;久而久之随着镜像拉取的越多&#xff0c;系统盘占用则越来越大。现有的网络资源关于docker desktop迁移都是旧版本的&#xff0c;即4.30版本之前。在4.30版本及以后&#xff0c;在运行wsl -l -v时只有docker-desktop只有这一项…

19种RAG结构

文章目录 什么是RAG19种RAG总览Standard RAGCorrective RAG&#xff0c;纠错型RAGSpeculative RAG&#xff0c;推测型RAGFusion RAG&#xff0c;融合型RAGAgentic RAG&#xff0c;智能代理型RAGSelf RAG&#xff0c;自增强型RAGGraph RAG&#xff0c;图谱RAGAdaptive RAGREALM:…

flink 内存配置(一):设置Flink进程内存

Apache Flink通过严格控制各个组件的内存使用&#xff0c;在JVM之上提供了高效的工作负载。虽然Flink社区努力为所有配置提供合理的默认值&#xff0c;但由于用户部署在Flink上的应用范围很广&#xff0c;这并不总是可行的。为了给用户提供最大的生产价值&#xff0c;Flink支持…

ssm037物流管理系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;物流管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本物流管理系统就是在这…

扩展卡尔曼滤波(EKF)的限制

当f (x)或h (x)接近线性时&#xff0c;EKF在许多实际问题上表现良好。然而&#xff0c;它在高度非线性的区域中失败了 EKF的概念是基于模型的线性化而提出的。EKF估计包括线性化误差。线性化误差取决于相对于传播的不确定度的函数的非线性度&#xff0c;如下图所示。 图13.13…

【ChatGPT】搜索趋势分析

【ChatGPT】搜索趋势分析 为了分析 ChatGPT 在过去一年的流行趋势&#xff0c;我们可以查看 Google Trends 的数据 安装依赖pytrends pip install pytrends运行以下 Python 脚本 import pandas as pd import matplotlib.pyplot as plt from pytrends.request import TrendR…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

未来已来,软件行业的下一个风口在哪里?

引言 随着技术的迅猛发展&#xff0c;软件行业正在不断迎来新的机遇和挑战。在这个充满活力和变革的时代&#xff0c;企业和开发者们纷纷寻找下一个可能改变游戏规则的风口。那么&#xff0c;软件行业的下一个风口在哪里&#xff1f;让我们一同探索未来的潜在趋势与创新方向。 …

Python批量查找包含多个关键词的PDF文件

在信息爆炸的时代&#xff0c;数据管理变得愈发重要。U盘作为一种便携式存储设备&#xff0c;常常承载着我们大量的个人和工作数据。然而&#xff0c;随着文件数量的增加&#xff0c;在U盘中快速找到特定文件常常成为一个令人头疼的难题。我们通常可以采用everything来快速查找…

python网络爬虫基础:requests库的应用

Requests 库是在 urllib 的基础上开发而来&#xff0c;相比之下更加简洁优美&#xff0c;在编写爬虫程序时应用较为广泛。注意&#xff0c;本文更偏于程序实现&#xff0c;具体各个字段、参数的解释详见本专栏其他博文&#xff08;后续看情况更新&#xff09;。闲话少说&#x…

新能源汽车火灾应急处置程序

摘要&#xff1a;新能源汽车在人们的日常生活中被广泛应用&#xff0c;但其消防安全问题也逐渐凸显。本文分析了新能源汽车的起火原因、燃烧危害性&#xff0c;并着重阐述了新能源汽车发生火灾后消防应急处置程序及应对措施等。 关键词&#xff1a;新能源汽车&#xff1b;火灾…

双十一买什么?便宜又好用的数码好物分享

​每年双十一大促期间&#xff0c;许多平时想买但又感觉有些贵的数码好物都会降至最低价格&#xff0c;此时入手岂不美哉&#xff0c;还犹豫就只能等明年了。也有很多小伙伴不知道该入手些什么数码好物&#xff0c;接下来我就给大家盘点几款整体使用下来还不错的数码好物。 长…

【矩阵理论常见符号说明】

矩阵理论常见符号说明 参考链接 【矩阵理论/刘启明主编. 北京:国防出版社】

11.Node.js API接口

八、API接口 8.1 json-server工具 1&#xff09;安装json-server npm i -g json-server2)示例 //students.json {"student":[{"id":1,"name":"sally","age":18,"gender":"女"},{"id":2,&…

Linux与Windows中的流量抓取工具:wireshark与tcpdump

1. wireshark&#xff08;windows上主要用到的流量分析工具&#xff09; 下载安装&#xff0c;安装到本地&#xff08;安装到虚拟机可能抓不到包&#xff09; 下载地址 1.1. 数据报文字段含义 source&#xff1a;源IP destination&#xff1a;目的IP protocol&#xff1a;协…