Flink 內部通信底層原理

        Flink 集群內部節點之間的通信是用 Akka 實現,比如 JobManager 和 TaskManager 之間的通信。而 operator 之間的數據傳輸是用 Netty 實現。

        RPC 框架是 Flink 任務運行的基礎,Flink 整個 RPC 框架基于 Akka 實現。

一、相關概念

RPC(Remote Procedure Call)

概念

  • 定義:遠程過程調用協議,允許程序像調用本地方法一樣調用遠程服務,隱藏底層網絡通信細節。

  • 作用:在分布式系統中,實現跨節點的控制指令傳遞(如任務調度、狀態同步等)。

  • Flink 中的應用

    • JobManager 與 TaskManager 之間的通信(任務部署、心跳檢測、故障通知等)。

    • Checkpoint 協調、資源申請等分布式操作。

核心特點
  • 同步/異步調用:支持阻塞式調用或異步回調。

  • 序列化:參數和返回值需要序列化傳輸(如 Flink 使用 TypeSerializer)。

  • 容錯:通過重試機制或超時處理保證可靠性。

Akka

概念
  • 定義:基于 Actor 模型的并發框架,提供高性能、分布式的消息驅動編程模型。

  • Actor 模型:每個 Actor 是獨立執行單元,通過異步消息傳遞通信,天然支持分布式和容錯。

  • Flink 中的應用

    • 早期版本(≤1.14):Flink 的 RPC 層基于 Akka 實現,JobManager 和 TaskManager 的通信通過 Akka Actor 完成。

    • 核心場景:任務調度、資源管理、Checkpoint 協調等控制層面的通信。

核心特點
  • 異步非阻塞:天然支持高并發和低延遲。

  • 容錯機制:通過監督策略(Supervision)處理 Actor 故障。

  • 分布式擴展:Actor 可跨節點部署,形成分布式系統。

Netty

概念
  • 定義:基于 NIO 的高性能網絡通信框架,專注于 TCP/UDP 數據傳輸。

  • 作用:提供可擴展的網絡層實現,支持高吞吐量和低延遲的數據傳輸。

  • Flink 中的應用

    • 數據傳輸層:TaskManager 之間的數據交換(如 Shuffle、廣播數據)。

    • 替代 Akka:從 Flink 1.15 開始,Netty 成為默認的 RPC 實現,逐步取代 Akka。

核心特點
  • 零拷貝:通過 ByteBuf 減少內存復制開銷。

  • 事件驅動:基于 Channel 和 EventLoop 的高效 IO 處理。

  • 可插拔協議:支持 HTTP、WebSocket 等多種協議。

三者的關系

協作模式
  1. RPC 是通信協議

    • 定義了分布式節點間的交互方式(如方法調用、參數傳遞)。

    • Akka 或 Netty 是實現 RPC 的底層框架

      • 在早期版本,Flink 使用 Akka Actor 實現 RPC。

      • 新版本中,Flink 基于 Netty 實現 RPC(更輕量、無依賴)。

  2. Akka vs. Netty 的角色演變

    • Akka:早期負責控制流(任務調度、心跳)和 RPC。

    • Netty:始終負責數據流(Shuffle 數據傳輸);新版本接管 RPC 層。

  3. 分工與協同

    • 控制流(RPC):協調作業生命周期(如啟動、停止)、資源管理。

    • 數據流(Netty):處理實際數據交換(如算子間的 Record 傳輸)。

架構演進
  • Flink 1.15+:為了減少對 Akka 的依賴(避免版本沖突),Flink 逐步將 RPC 層遷移到基于 Netty 的自研實現(flink-rpc 模塊)。

  • 當前狀態

    • 控制流:Netty-based RPC。

    • 數據流:Netty 網絡棧(替代了早期的 Netty + Akka 混合模式)

二、Akka 與 Actor 模型

        Akka 是 Actor Model 的一個實現,在 Actor 模型中,所有的實體被認為是獨立的 actors。actor 和其他 actor 通過發送異步消息通信。每個 actor 有一個郵箱(mailbox),它收到的消息存儲在里面。每個 actor 維護自身單獨的狀態。

        下面是一個 Actors 網絡:

        每個 actor 是一個單一的線程,它不斷地從它的郵箱中 poll 消息,并且不斷地處理。對于已經處理過的消息的結果,actor 可以改變它自身的內部狀態或者發送一個新消息或者孵化一個新的 actor。盡管單個的 actor 是

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79844.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79844.shtml

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

相關文章

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置)

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置) 摘要:本文手把手教學在無外網環境下部署生產級Kubernetes 1.28高可用集群,涵蓋ETCD集群、HAProxy+Keepalived負載均衡、Containerd運行時、Calico網絡插件及Kuboard可視化管理全流程。提供100年有效證書配置…

【中間件】redis使用

一、redis介紹 redis是一種NoSQL類型的數據庫,其數據存儲在內存中,因此其數據查詢效率很高,很快。常被用作數據緩存,分布式鎖 等。SpringBoot集成了Redis,可查看開發文檔Redis開發文檔。Redis有自己的可視化工具Redis …

C語言——函數遞歸與迭代

各位CSDN的uu們大家好呀,今天將會給大家帶來關于C語言的函數遞歸的知識,這一塊知識理解起來稍微會比較難,需要多花點時間。 話不多說,讓我們開始今天的內容吧! 目錄 1.函數遞歸 1.1 什么是遞歸? 1.2 遞歸…

藏品館管理系統

藏品館管理系統 項目簡介 這是一個基于 PHP 開發的藏品館管理系統,實現了藏品管理、用戶管理等功能。 藏品館管理系統 系統架構 開發語言:PHP數據庫:MySQL前端框架:BootstrapJavaScript 庫:jQuery 目錄結構 book/…

centos停服 遷移centos7.3系統到新搭建的openEuler

背景 最近在做的事,簡單來講,就是一套系統差不多有10多臺虛擬機,都是centos系統,版本主要是7.3、7.6、7.9,現在centos停止維護了,轉為了centos stream,而centos stream的定位是:Red …

什么是 IDE?集成開發環境的功能與優勢

原文:什么是 IDE?集成開發環境的功能與優勢 | w3cschool筆記 (注意:此為科普文章,請勿標記為付費文章!且此文章并非我原創,不要標記為付費!) IDE 是什么? …

jenkins批量復制Job項目的shell腳本實現

背景 現在需要將“測試” 目錄中的所有job全部復制到 一個新目錄中 test2。可以結合jenkins提供的apilinux shell 進行實現。 測試目錄的實際文件夾名稱是 test。 腳本運行效果如下: [qdevsom5f-dev-hhyl shekk]$ ./copy_jenkins_job.sh 創建文件夾 test2 獲取源…

VisualSVN過期后的解決方法

作為一款不錯的源代碼管理軟件,svn還是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天試用期過后,它就不能被免費使用了。下面給大家講如何免費延長過期時間(自定義天數,可以設定一個很大的值…

硬件工程師筆記——電子器件匯總大全

目錄 1、電阻 工作原理 歐姆定律 電阻的物理本質 一、限制電流 二、分壓作用 三、消耗電能(將電能轉化為熱能) 2、壓敏電阻 伏安特性 1. 過壓保護 2. 電壓調節 3. 浪涌吸收 4. 消噪與消火花 5. 高頻應用 3、電容 工作原理 (…

[圖論]Kruskal

Kruskal 本質:貪心,對邊進行操作。存儲結構:邊集數組。適用對象:可為負權圖,可求最大生成樹。核心思想:最短的邊一定在最小生成樹(MST)上,對最短的邊進行貪心。算法流程:對全體邊集…

vulnhub five86系列靶機合集

five86 ~ VulnHubhttps://www.vulnhub.com/series/five86,272/ five86-1滲透過程 信息收集 # 主機發現 nmap 192.168.56.0/24 -Pn ? # 靶機全面掃描 nmap 192.168.56.131 -A -T4 目錄掃描 dirsearch -u http://192.168.56.131/ /robots.txt提示/ona。 /ona二層目錄掃描。 …

如何高效利用呼叫中心系統和AI語音機器人

要更好地使用呼叫中心系統和語音機器人,需要結合兩者的優勢,實現自動化、智能化、高效率的客戶服務與業務運營。以下是優化策略和具體實踐方法: 一、呼叫中心系統優化 1. 智能路由與IVR優化 智能ACD(自動呼叫分配) …

Nacos安裝及數據持久化

1.Nacos安裝及數據持久化 1.1下載nacos 下載地址:https://nacos.io/download/nacos-server/ 不用安裝,直接解壓縮即可。 1.2配置文件增加jdk環境和修改單機啟動standalone 找到bin目錄下的startup.cmd文件,添加以下語句(jdk路徑根據自己…

【牛客練習賽137 C】題解

比賽鏈接 C. 變化的數組(Easy Version) 題目大意 一個長度為 n n n 的非負數組 a a a,要求執行 k k k 次操作,每次操作如下: 有 1 2 \frac{1}{2} 21? 的概率令 a i ← a i ( a i ? m ) x , ? i ∈ [ 1 , n ] a_i \leftarrow a_…

Redis適用場景

Redis適用場景 一、加速緩存二、會話管理三、排行榜和計數器四、消息隊列五、實時分析六、分布式鎖七、地理位置數據八、限流九、數據共享十、簽到 一、加速緩存 Redis最常見的應用之一是作為緩存層,用于存儲頻繁訪問的數據,從而減輕數據庫的負載。 通過…

【LangChain4j快速入門】5分鐘用Java接入AI大模型,Spring Boot整合實戰!| 附源碼

【LangChain4j快速入門】5分鐘用Java接入AI大模型,Spring Boot整合實戰! 前言:當Java遇上大模型 在AI浪潮席卷全球的今天,Java開發者如何快速擁抱大語言模型?LangChain4j作為專為Java打造的AI開發框架,以…

2025第十七屆“華中杯”大學生數學建模挑戰賽題目B 題 校園共享單車的調度與維護問題完整成品正文33頁(不含附錄)文章思路 模型 代碼 結果分享

校園共享單車運營優化與調度模型研究 摘 要 本研究聚焦校園共享單車點位布局、供需平衡、運營效率及故障車輛回收四大核心問題,通過構建一系列數學模型,系統分析與優化共享單車的運維體系。 針對問題一,我們建立了基于多時段觀測的庫存估算…

Unity游戲多語言工具包

由于一開始的代碼沒有考慮多語言場景,導致代碼中提示框和UI顯示直接用了中文,最近開始提取代碼的中文,提取起來太麻煩,所以拓展了之前的多語言包,降低了操作復雜度。最后把工具代碼提取出來到單獨項目里面,…

.NET MCP 文檔

MCP 概述 MCP(Model Context Protocol)是由 Anthropic 推出的一種開放協議,類似 AI 的 USB-C 擴展塢,用于在大模型和數據源之間建立安全的通信(授權),讓 AI 應用能夠安全地訪問和操作本地或遠程…

【Linux】vim配置----超詳細

目錄 一、插件管理器準備 二、目錄準備 三、安裝插件 一、插件管理器準備 Vim-plug 是一個Vim插件管理器,利用異步并行可以快速地安裝、更新和卸載插件。它的安裝和配置都非常簡單,而且在操作過程中會給出很多易讀的反饋信息,是一個自由、…