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.mzph.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插件管理器,利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个自由、…