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.pswp.cn/web/11581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11581.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搜索引擎的設計與實現(二)

目錄 3 搜索引擎的基本原理 3.1搜索引擎的基本組成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.檢索器(Searcher) 4.用戶接口(UserInterface) 3.2搜索引擎的詳細工作流程 4 系統分析與設計 4.1系統分析 4.2系統概要設計 4.2系統實現目標 前面內容請移步 搜索引…

Rust 語言不支持 goto 語句

一、Rust 不提供 goto 語句 Rust 語言并沒有提供 goto 語句。goto 語句在很多現代編程語言中已經不再被推薦使用&#xff0c;因為它可能導致代碼的流程變得難以跟蹤和理解&#xff0c;特別是在復雜的程序中。Rust 語言設計者選擇了更加結構化和可預測的控制流語句&#xff0c;…

關于C++多態的復習總結

多態 簡介: 面向對象的三大特性之一&#xff0c;多態顧名思義即具有多種形態&#xff0c;即去執行某個行為時&#xff0c;當不同的對象去執行時會產生不同的狀態 構成多態的條件 條件一 必須通過基類&#xff08;父類&#xff09;的指針或者引用調用虛函數&#xff08;函數…

寧夏銀川市起名專家的老師顏廷利:死神(死亡)并不可怕,可怕的是...

在中國優秀傳統文化之中&#xff0c;漢語‘巳’字與‘四’同音&#xff0c;在阿拉伯數字里面&#xff0c;通常用‘4’來表示&#xff1b; 湖南長沙、四川成都、重慶、寧夏銀川最靠譜最厲害的起名大師的老師顏廷利教授指出&#xff0c;作為漢語‘九’字&#xff0c;倘若是換一個…

FreeRTOS中斷管理

FreeRTOS中斷管理 基于STM32_stm32 freertos 按鍵中斷-CSDN博客 更加詳情請看以上鏈接↑ 中斷優先級 任何中斷的優先級都大于任務! 在我們的操作系統,中斷同樣是具有優先級的,并且我們也可以設置它的優先級,但是他的優先 級并不是從 0~15 ,默認情況下它是從 5~15 ,…

[ACTF新生賽2020]SoulLike

沒見過的錯誤&#xff1a; ida /ctg目錄下的hexrays.cfg文件中的MAX_FUNCSIZE64 改為 MAX_FUNCSIZE1024 然后就是一堆數據 反正就是12個字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

94.二叉樹的中序遍歷

刷算法題&#xff1a; 第一遍&#xff1a;1.看5分鐘&#xff0c;沒思路看題解 2.通過題解改進自己的解法&#xff0c;并且要寫每行的注釋以及自己的思路。 3.思考自己做到了題解的哪一步&#xff0c;下次怎么才能做對(總結方法) 4.整理到自己的自媒體平臺。 5.再刷重復的類…

Python爬蟲入門:網絡世界的寶藏獵人

今天阿佑將帶你踏上Python的肩膀&#xff0c;成為一名網絡世界的寶藏獵人&#xff01; 文章目錄 1. 引言1.1 簡述Python在爬蟲領域的地位1.2 闡明學習網絡基礎對爬蟲的重要性 2. 背景介紹2.1 Python語言的流行與適用場景2.2 網絡通信基礎概念及其在數據抓取中的角色 3. Python基…

今日總結2024/5/13

今日學習了01背包求具體方案的方法 Acwing.12 背包問題求具體方案 由于背包是從小到大枚舉物品&#xff0c;只能從后往前判斷是從哪個狀態遞推過來的&#xff0c;而該題要求按字典序順序輸出字典序最小的最優方案 因此要將物品從大到小枚舉&#xff0c;判斷時從小到大判斷是…

在Windows上有哪些好用的網絡抓包工具?

2024年5月12日&#xff0c;周日上午 在Windows上&#xff0c;有多種好用的網絡抓包工具&#xff0c;以下是一些常見的選項&#xff1a; Wireshark&#xff1a; Wireshark 是一款功能強大的網絡協議分析工具&#xff0c;它可以捕獲并分析計算機網絡上的數據包。它支持廣泛的協議…

ssm+vue的公務用車管理智慧云服務監管平臺查詢統計(有報告)。Javaee項目,ssm vue前后端分離項目

演示視頻&#xff1a; ssmvue的公務用車管理智慧云服務監管平臺查詢統計&#xff08;有報告&#xff09;。Javaee項目&#xff0c;ssm vue前后端分離項目 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&…

求階乘n!末尾0的個數溢出了怎么辦

小林最近遇到一個問題&#xff1a;“對于任意給定的一個正整數n&#xff0c;統計其階乘n&#xff01;的末尾中0的個數”&#xff0c;這個問題究竟該如何解決&#xff1f; 先用n5來解決這個問題。n的階乘即n!5!5*4*3*2*1120&#xff0c;顯然應該為2個數相乘等于10才能得到一個結…

軟件測試自動化:加速測試,提升效率

目錄 測試自動化的內涵 測試自動化的原理 測試工具的分類和選擇 自動化測試的引入 在當今的軟件開發中&#xff0c;測試自動化已經成為提升效率和確保軟件質量的關鍵環節。測試自動化是指使用軟件工具和腳本來執行重復的測試任務&#xff0c;從而減輕人工測試的負擔&#x…

量化交易包含些什么?

我們講過許多關于量化交易的內容&#xff0c;但是量化交易具體可以做些什么&#xff1f;很多朋友都還不清楚&#xff0c;我們詳細來探討下&#xff01; 第一&#xff1a;什么是量化交易&#xff1f; 量化交易是一種利用先進的數學模型和計算機技術&#xff0c;從大量的歷史數…

制造業精益生產KPI和智慧供應鏈管理方案和實踐案例分享

隨著工業4.0的推進和國家對制造業高質量發展的重視&#xff0c;工業數據已躍升為生產經營活動中不可或缺的核心要素&#xff0c;同時&#xff0c;工業數據也是形成新質生產力的優質生產要素&#xff0c;助力企業實現高效精益生產。 工業數據在制造業中的作用不可忽視&#xff…

常見地圖坐標系間的轉換算法JavaScript實現

文章目錄 ?? 不同的地圖廠商使用不同的坐標系來表示地理位置。以下簡述:?? 前置常量和方法:?? BD-09轉GCJ-02(百度轉谷歌、高德)?? GCJ-02轉BD-09(谷歌、高德轉百度)?? WGS84轉GCJ-02(WGS84轉谷歌、高德)?? GCJ-02轉WGS84(谷歌、高德轉WGS84)?? BD-09轉wgs84坐…

Linux: 默認進程介紹

進程名稱介紹systemdSystemd 可以管理所有系統資源。不同的資源統稱為 Unit&#xff08;單位&#xff09;。 Unit 一共分成12種。 systemctl list-units命令可以查看當前系統的所有 Unitkthreaddkthreadd進程由idle通過kernel_thread創建&#xff0c;并始終運行在內核空間, 負責…

H5利用微信開放標簽喚起用戶手機APP

APP殼子分享網頁到微信&#xff0c;被分享人在微信打開網頁后&#xff0c;利用公眾號配置微信開放標簽[wx-open-launch-app]&#xff0c;實現喚起APP 一、Vue2.x&#xff08;2.6.11&#xff09; 1. main.js // main.jsimport Vue from vue;Vue.config.ignoredElements [wx-o…

Hbase基礎操作Demo(Java版)

一、前置條件 HBase服務&#xff1a;【快捷部署】023_HBase&#xff08;2.3.6&#xff09;開發環境&#xff1a;Java&#xff08;1.8&#xff09;、Maven&#xff08;3&#xff09;、IDE&#xff08;Idea 或 Eclipse&#xff09; 二、相關代碼 代碼結構如上圖中①和② pom.x…

IO—消息隊列+管道

使用消息隊列實現的2個終端之間的互相聊天 并使用信號控制消息隊列的讀取方式: 當鍵盤按ctrlc的時候&#xff0c;切換消息讀取方式&#xff0c;一般情況為讀取指定編號的消息&#xff0c;按ctr1c之后&#xff0c;指定的編號不讀取&#xff0c;讀取其他所有編號的消息 wftok.c …