Flink HA模式下JobManager切换时发送告警

资源&版本信息

Flink版本1.14.6

运行平台:K8s

HA使用ZK(使用K8s的ETC应该是一个道理)

详解Flink HA原理

Flink启动时会创建HighAvailabilityServices提供HA和相关基础服务,其中包括leaderRetrievalService和LeaderElectionService服务;

  • leaderRetrievalService用于高可用组件的调用方获得leader节点,例如在JobManager中通过ResourceManagerLeaderRetriever服务获取ResourceManager的Leader节点;

  • LeaderElectionService用于主节点竞选,一旦当前组件被选为Leader节点,就可以对外提供服务,leaderRetrievalService就能够获取已注册且有效的Leader节点;

LeaderRetrievalService讲解

DefaultLeaderRetrievalService类结构如下

在这里插入图片描述

  1. LeaderRetrievalService默认实现类DefaultLeaderRetrievalService;DefaultLeaderRetrievalService还实现了LeaderRetrievalEventHandler接口(该接口只有notifyLeaderAddress方法,用于状态变化时被回调);

  2. DefaultLeaderRetrievalService中notifyLeaderAddress方法会判断当前是否处于运行状态,然后调用leaderListener.notifyLeaderAddress方法通知监听器leader变更!

  3. DefaultLeaderRetrievalService.leaderListener是LeaderRetrievalListener一种实现JobManagerLeaderListener,用于TaskManager监听Jobmanager变更的实现类,实现在jobmanager变更时及时修改连接信息。

如何实现HA变更时发送告警信息了?

JobManager宕机重启或ZK不可用后恢复,此时肯定会发生HA切换,其次根据代码观察每次HA切换必会导致leaderId变化(每次连接),根据上述背景知识逐个情况分析。

JobManager宕机:

根据日志观察leaderListener.notifyLeaderAddress方法会被调用两次,第一次是将leaderId地址设置为空,在JobManager启动并选举为leader后,notifyLeaderAddress会被再次调用将leaderId设置为最新的leaderId;

ZK不可用:

根据日志观察leaderListener.notifyLeaderAddress方法会被调用三次,假设leaderId原先是A,先被设置为null,然后被设置为A,再被设置为B;

结论:

根据上述情况,我们可以在leaderListener.notifyLeaderAddress方法中记录每次的leaderId的值,当该值发生变化时,变为null或者由A变成B时发送HA变更告警即可;为了更加精准,选择leaderId在A变成B时,或者leaderId在null变成B时发送告警

如何在leaderListener.notifyLeaderAddress方法中将告警发出了?

使用java agent,在flink启动时设置agent即可(-javaagent:agent.jar=123其中123是入参);具体代码插入点可选择方法进入时或同步块中

@Override
public void notifyLeaderAddress(@Nullable final String leaderAddress, @Nullable final UUID leaderId) {Optional<JobMasterId> jobManagerLostLeadership = Optional.empty();synchronized (lock) {if (stopped) {LOG.debug("{}'s leader retrieval listener reported a new leader for job {}. "+ "However, the service is no longer running.",DefaultJobLeaderService.class.getSimpleName(),jobId);} else {final JobMasterId jobMasterId = JobMasterId.fromUuidOrNull(leaderId);LOG.debug("New leader information for job {}. Address: {}, leader id: {}.",jobId,leaderAddress,jobMasterId);if (leaderAddress == null || leaderAddress.isEmpty()) {// the leader lost leadership but there is no other leader yet.jobManagerLostLeadership = Optional.ofNullable(currentJobMasterId);closeRpcConnection();} else {// check whether we are already connecting to this leaderif (Objects.equals(jobMasterId, currentJobMasterId)) {LOG.debug("Ongoing attempt to connect to leader of job {}. Ignoring duplicate leader information.",jobId);} else {closeRpcConnection();openRpcConnectionTo(leaderAddress, jobMasterId);}}}}// send callbacks outside of the lock scopejobManagerLostLeadership.ifPresent(oldJobMasterId ->jobLeaderListener.jobManagerLostLeadership(jobId, oldJobMasterId));
}

最终实现待更新~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL5.7压缩包安装图文教程

一、下载 https://dev.mysql.com/downloads/mysql/ 选择5.7版本 二、解压 下载完成后解压&#xff0c;解压后如下&#xff08;zip是免安装的&#xff0c;解压后配置成功即可使用&#xff09; 注意&#xff1a;只有5.6以前的版本才有在线安装&#xff08;install msi&#xf…

用友U8与旺店通的对接案例分析

在现代企业管理中&#xff0c;财务管理和电商运营管理是企业数字化转型的两个重要组成部分。用友U8作为企业的财务管理系统&#xff0c;与旺店通这一电商ERP系统的结合&#xff0c;可以为企业带来全面的数据整合和流程自动化。本文将通过轻易云集成平台的视角&#xff0c;分析用…

2024统计建模成品论文39页(附带完整数据集和代码)

2024统计建模成品论文完整版一等奖论文【1.5w字全网最佳】2024统计建模大赛高质量成品论文39页配套完整代码运行全套数据集https://www.jdmm.cc/file/2710661/

安科瑞AIM-D100-ES光伏储能系统直流绝缘监测仪

概述 AIM-D100-ES 型直流绝缘监测仪主要用于在线监测直流不接地系统正负极对地绝缘电阻&#xff0c;当绝缘电阻低于设定值时&#xff0c;能发出预警和报警信号。 产品可测 100-1500V 的直流系统&#xff0c;可应用于储能直流系统、电动汽车充电装置、UPS 供电系统、光伏直流系…

Linux下Telemac-Mascaret源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩 三、编译安装 3.1 修改环境变量设置文件 3.2 修改配置文件 3.3 编译安装 四、算例运行 软件介绍 TELEMAC-MASCARET是法国电力集团(EDF)的法国国立水利与环境实验室开发的一款研究水动力学和水文学领域的…

GIT基础01 基础命令与分支

前言 我们知道git是开发中比较常见的版本控制工具 我们可以先提出一个场景: 老板让你去修改方案 第一次修改 打回 第二次修改 打回 第n次修改 老板让你使用第一次的版本 阁下如何应对??? 我对每个版本进行编号?? 是一种方案 但是这里也是有缺陷的 比如说在很多版本中找…

通往糊涂之路 The road to serfdom

最近被推送了一本书&#xff0c;哈耶克的............ 试一试&#xff0c;看看能不能看懂&#xff0c;也许是通往糊涂之路。

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程&#xff0c;不仅是品尝美酒&#xff0c;更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得&#xff0c;养成写品鉴笔记的习惯是十分必要的。 首先&#xff0c;选择一个适合的记录工具。可以是传统的笔记本&#xff0c;也可以是…

【Linux线程(一)】线程初理解

前言&#xff1a; &#xff08;一&#xff09;线程的概念 &#xff08;二&#xff09;线程的理解 &#xff08;三&#xff09;示例 &#xff08;四&#xff09;线程优缺点 线程的优点 线程的缺点 &#xff08;五&#xff09;线程和进程的切换 1.线程的切换 2.进程的切换…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行&#xff1f; 一、 最终效果 懒得写那么多了…我也不知道该怎么写了&#xff0c;有点乱&#xff0c;有问题可以在评论里留言&#xff0c;我看到会解决的&#xff0c;在这个过程中也踩到了一些坑&#xff0c;但好在有CSDN帮助解决…

自然语言转SQL(NL2SQL、Text2SQL)

使用 FastAPI 框架和 LangChain 库构建的简单 Web 服务&#xff0c;其目的是将自然语言处理&#xff08;NLP&#xff09;应用于 SQL 查询生成。以下是代码中使用的技术架构和业务流程的详细说明&#xff1a; 技术架构 FastAPI&#xff1a;一个现代、快速&#xff08;高性能&am…

【HarmonyOS】综合应用-《校园通》

概念 本文结合之前的笔记文章知识点&#xff0c;做一个综合性的小应用。 创建一个ArkTS语言的鸿蒙项目&#xff0c;搭建首页面 其界面代码如下&#xff0c;该界面使用了垂直布局&#xff0c;相对布局&#xff0c;轮播布局&#xff0c;以及图片&#xff0c;文本等组件的综合运…