当前位置: 首页 > news >正文

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 是

相关文章:

Flink 内部通信底层原理

Flink 集群内部节点之间的通信是用 Akka 实现,比如 JobManager 和 TaskManager 之间的通信。而 operator 之间的数据传输是用 Netty 实现。 RPC 框架是 Flink 任务运行的基础,Flink 整个 RPC 框架基于 Akka 实现。 一、相关概念 RPC(Remote Procedure Call) 概念 定义:…...

async-profiler火焰图找出耗CPU方法

事情起于开发应用对依赖的三方包(apache等等)进行了升级后(主要是升级spring),CPU的使用率较原来大幅提升,几个应用提升50%-100%。 查找半天,对比每次版本的cpu火焰图,看不出有什么…...

深入理解Qt状态机的应用

深入理解Qt状态机的应用 Chapter1 深入理解Qt状态机的应用(一)什么是有限状态机?状态机的组成应用示例交通信号控制灯系统简单在线购物流程系统 Qt状态机框架Qt状态机框架组成常用接口说明 应用示例源码 Chapter2 深入理解Qt状态机的应用&…...

Python入门安装和语法基础

1.Python简介 Python是解释型语言, ython就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写&am…...

Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)

一、无覆盖和放弃 在基于磁贴的延迟呈现 (TBDR) 体系结构上呈现内容: Direct3D 11.1 中的呈现目标现在可以使用一组新的资源 API 来支持放弃行为。 开发人员必须了解此功能,并调用额外的 Discard () 方法,以在 TBDR 体系结构 (更高效地运行…...

如何分析服务器日志以追踪黑客攻击行为

分析服务器日志是追踪黑客攻击行为的关键手段。通过系统性地检查日志文件,可以发现异常访问模式、入侵痕迹和后门活动。以下是详细的日志分析方法: 一、重点日志文件定位 Web服务器日志 Nginx: /var/log/nginx/access.log(访问日志&#xff0…...

React 对state进行保留和重置

对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置,React 可以跟踪哪些 state 属于哪个组件。你可以控制在重新渲染过程中何时对 state 进行保留和重置。 开发环境:Reacttsantd 学习内容 React 何时选择保留或重置状态…...

EmbeddingBag介绍与案例

我们可以用一个具体的例子来说明 EmbeddingBagCollection 的核心作用和它如何处理用户特征。假设我们的用户特征包括 “item_id” 和 “cate_id” 两个字段,每个字段都有各自的离散取值,也就是一些整数 ID。为了让模型能处理这些离散数据,我们…...

css button 点击效果

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>button点击效果</title><style>#container {display: flex;align-items: center;justify-content: center;}.pushable {position: relat…...

Missashe考研日记-day22

Missashe考研日记-day22 1 专业课408 学习时间&#xff1a;3h学习内容&#xff1a; 先把昨天关于进程调度的课后习题做了&#xff0c;然后花了挺长时间预习OS的最最最最重要的一部分——同步与互斥问题&#xff0c;这部分大二上课的时候就懵懵懂懂的&#xff0c;得认真再领悟…...

二十、FTP云盘

1、服务端 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h>…...

SVM-RF回归预测matlab代码

数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例为8&#xff1a;1&#xff1a;1 模块化结构: 代码将整个流程模块化&#xff0c;使得代码更易于理解和维护。不同功能的代码块被组织成函数或者独立的模块&#xff0c;使得代码逻辑清晰&#xff0c;结构化程…...

Lombok @Builder 注解的进阶玩法:自定义 Getter/Setter 方法全攻略

大家好呀&#xff01;&#x1f44b; 今天我们来聊聊 Java 开发中超级实用的 Lombok 库&#xff0c;特别是它的 Builder 注解。很多小伙伴都用过 Builder 来简化对象的创建&#xff0c;但你们知道吗&#xff1f;当我们需要自定义 getter/setter 方法时&#xff0c;Builder 也能玩…...

C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)

&#x1f4d8; 本篇我们将结合之前的 SignalHub 与 Dispatcher 机制&#xff0c;构建一个适合 GUI 场景的响应式信号系统。以按钮点击为例&#xff0c;构建一个跨线程安全的事件响应系统&#xff0c;配合协程挂起/恢复&#xff0c;让 UI 编程也能更优雅易读。本篇以通俗方式讲解…...

HCIP(OSPF )(2)

OSPF 公共报文头部 版本&#xff08;8bit&#xff09;&#xff1a;目前常用版本为 2&#xff0c;用于标识 OSPF 协议版本。不同版本在功能特性和报文格式上可能存在差异&#xff0c;高版本通常会修复旧版本的漏洞、扩展功能&#xff0c;如支持更多类型的网络拓扑、增强安全性等…...

zynq7020 ubuntu_base 跟文件系统

整体流程 制作 ubuntu_base 镜像运行 petalinux 构建的 ramdisk 系统用 ramdisk 系统把 ubuntu_base 镜像烧录到 emmc从 emmc 跟文件系统 启动内核 制作 ubuntu_base 镜像 制作 ubuntu_base 镜像 sudo apt-get install qemu-user-static # 安装 q…...

51、Spring Boot 详细讲义(八) Spring Boot 与 NoSQL

3、 Elasticsearch 集成 3.1 Elasticsearch 概述 3.1.1 Elasticsearch 的核心概念 Elasticsearch 是一个开源的分布式搜索引擎,主要用于实时数据检索和分析。它的核心功能包括全文检索、结构化查询和分析大规模数据。 分布式搜索引擎: Elasticsearch 将数据分布存储在多个…...

什么是分库分表?

分库分表是一种数据库的分布式架构设计策略&#xff0c;以下是详细介绍&#xff1a; 概念 • 随着互联网的发展&#xff0c;数据量呈爆炸式增长&#xff0c;单个数据库服务器可能难以应对海量数据的存储和访问压力。分库分表就是将原本庞大的数据库拆分成多个小的数据库&#…...

如何让别人访问到自己本地项目?使用内网穿透工具简单操作下实现公网连接!

本地搭建服务器的系统项目网络地址&#xff0c;在没有公网IP使用的情况下&#xff0c;如何让局域网外别人访问到自己本地网站和应用呢&#xff1f;这里介绍一种通用的内网发布公网访问&#xff0c;且简便操作的内网穿透实现方法。 一、什么是内网穿透&#xff1f; 1. 先了解内…...

第一篇:linux之虚拟环境与centos安装

第一篇&#xff1a;linux之虚拟环境与centos安装 文章目录 第一篇&#xff1a;linux之虚拟环境与centos安装一、vmware安装二、centos安装1、centos虚拟环境安装2、centos操作系统配置3、常见问题解决 一、vmware安装 我们想要运行linux&#xff0c;需要先安装一个虚拟软件&am…...

Redis List 的详细介绍

Redis List 的详细介绍 以下是 Redis List 的详细介绍&#xff0c;从基础命令、内部编码和使用场景三个维度展开&#xff1a; 一、基础命令 Redis List 支持双向操作&#xff08;头尾插入/删除&#xff09;&#xff0c;适用于队列、栈等场景&#xff0c;以下是核心命令分类&a…...

docker占用磁盘100%

1. 立即清理方案 快速清理命令 bash 复制 # 停止Docker服务 sudo systemctl stop docker# 清理所有无用数据&#xff08;包括未使用的镜像、容器、网络和卷&#xff09; sudo docker system prune -a --volumes# 重启Docker sudo systemctl start docker 手动清理overlay2…...

20250417-vue-条件插槽

有时候我们需要根据内容是否被传入了插槽来渲染某些内容。 你可以结合使用 $slot 属性与 v-if 来实现。 在下面的示例中&#xff0c;我们定义了一个卡片组件&#xff0c;它拥有三个条件插槽&#xff1a;header、footer 和 default。当 header、footer 或 default 的内容存在时…...

【Unity】UI点击事件处理器

目录 前言脚本 前言 在开发过程中&#xff0c;经常需要监听UI的点击事件&#xff0c;这里我给大家整理一下&#xff0c;脚本直接挂在需要监听的节点上即可。 脚本 using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems;namespace GameLogic {/// &…...

阿里云服务器的docker环境安装nacos--实践

阿里云服务器的docker环境安装nacos–实践 前提先安装mysql数据库&#xff0c;mysql中创建nacos所需的表以下为阿里云服务器docker环境安装&#xff0c;需在安全组开放8848端口 1. 拉取nacos-server镜像 //最新版本nacos docker pull nacos/nacos-server//或者指定nacos版本…...

每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)

一.合并k个升序链表 1.1题目描述 1.2题解思路 解法一&#xff1a;小根堆 我们可以先定义一个小根堆&#xff0c;将k个指针的头结点如堆&#xff0c;每次取堆顶元素尾插到newhead中&#xff0c;然后再pop()&#xff0c;接着push堆顶原来堆顶元素的下一个节点 重点分析&#…...

数据结构——反射、枚举以及lambda表达式

1. 反射 Java的反射&#xff08;reflection&#xff09;机制是在运⾏时检查、访问和修改类、接⼝、字段和⽅法的机制&#xff1b;这种动态获取信息以及动态调⽤对象⽅法的功能称为java语⾔的反射&#xff08;reflection&#xff09;机制。 用途 1. 框架开发 2. 注解处理 3.…...

深入理解 HTML5 Web SQL 数据库:用法、现状与替代方案

一、引言 在 Web 开发的领域中,客户端存储一直是一个关键的话题。HTML5 带来了多种客户端存储的解决方案,其中 Web SQL 数据库曾经是一个备受关注的选项。尽管如今它已被废弃,但了解其原理、使用方法以及为何被替代,对于 Web 开发者来说仍然具有重要的意义。本文将深入探讨…...

系统架构设计(一):UML与软件架构

什么是系统架构设计&#xff1f; 系统架构设计是对系统高层结构和行为的描述&#xff0c;包括&#xff1a; 系统的各个模块&#xff08;组件&#xff09;模块之间的交互方式数据流动、控制流动技术选型与部署策略 系统架构常见的风格有&#xff1a; 分层架构&#xff08;La…...

极狐GitLab 外部流水线验证功能解读

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部流水线验证 (BASIC SELF) 您可以使用外部服务在创建流水线之前进行验证。 极狐GitLab 发送一个 POST 请求到外部服务的…...

MCP和A2A是什么?

MCP和A2A是什么&#xff1f; MCP&#xff08;Model-Connect Protocol&#xff09;和A2A&#xff08;Agent-to-Agent&#xff09;协议逐渐成为行业关注的焦点。这两个协议分别由Anthropic和谷歌推出&#xff0c;旨在提升智能体与外部工具、数据源及API资源的连接效率&#xff0c…...

CNN卷积神经网络

一、什么是卷积神经网络&#xff08;CNN&#xff09; CNN&#xff08;卷积神经网络&#xff09;是一种专门用于处理图像的神经网络&#xff0c;尤其在图像识别任务中表现出色&#xff0c;例如识别手写数字。它通过多层结构逐步提取图像特征&#xff0c;最终输出识别结果。与传…...

生物信息学技能树(Bioinformatics)与学习路径

李升伟 整理 生物信息学是一门跨学科领域&#xff0c;涉及生物学、计算机科学以及统计学等多个方面。以下是关于生物信息学的学习路径及相关技能的详细介绍。 一、基础理论知识 1. 生物学基础知识 需要掌握分子生物学、遗传学、细胞生物学等相关概念。 对基因组结构、蛋白质…...

Obsidian无门槛简明教程

Obsidian简明教程 Markdown基本语法基本码字标题换行段落引用分割线代码块链接带名字的链接超链接插入图片 强调语法加粗斜体删除线高亮 列表有序列表无序列表任务列表 Obsidian核心用法软件基本使用安装仓库文件夹笔记编辑与查看 资源 核心插件双链标签 三方插件Various Compl…...

常用 Git 命令详解

Git 是一个强大的版本控制工具&#xff0c;广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令&#xff0c;并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…...

【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理

目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域&#xff0c;Hadoop生态系统…...

多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯

多路由器通过三层交换机互相通讯&#xff08;单臂路由静态路由默认路由版&#xff09; 先实现各个小框框里能够互通 哇咔 交换机1&#xff08;二层交换机,可看配置单臂路由的文章) Switch>en Switch#conf t Switch(config)#int f0/1 Switch(config-if)#switchport access…...

电控---CMSIS概览

1. CMSIS库简介 CMSIS&#xff08;Cortex Microcontroller Software Interface Standard&#xff0c;Cortex微控制器软件接口标准&#xff09;是由ARM公司开发的一套标准化软件接口&#xff0c;旨在为基于ARM Cortex-M系列处理器&#xff08;如Cortex-M0/M0/M3/M4/M7/M33等&am…...

2025.04.17【Stacked area】| 生信数据可视化:堆叠区域图深度解析

文章目录 生信数据可视化&#xff1a;堆叠区域图深度解析堆叠面积图简介为什么使用堆叠面积图如何使用R语言创建堆叠面积图安装和加载ggplot2包创建堆叠面积图的基本步骤示例代码 解读堆叠面积图堆叠面积图的局限性实际应用案例示例&#xff1a;基因表达量随时间变化 结论 生信…...

XSS之同源、跨域、内容安全策略

一、什么是同源策略 HTML的同源策略是浏览器的一个重要的安全机制&#xff0c;它用于限制一个源的网页如何与另一个源的资源进行交互&#xff0c;以此来减少夸站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全风险。 同源的定义 若两个URL的协议&#xff08;protocol&#xff09;、…...

十三、系统设计

一、前言 二、架构设计概念 三、架构风格 四、面向服务的架构 五、微服务 六、MDA 七、软件界面设计 八、软件设计的构成 九、结构化设计 十、面向对象设计内容提要 十一、面向对象设计原则 十二、架构模式、设计模式与惯用法...

HTTP 2.0 协议特性详解

1. 使用二进制协议&#xff0c;简化传输的复杂性&#xff0c;提高了效率 2. 支持一个 TCP 链接发起多请求&#xff0c;移除 pipeline HTTP/2 移除了 HTTP/1.1中的管道化&#xff08;pipeline&#xff09;机制&#xff0c;转而采用多路复用&#xff08;Multiplexing&#xff0…...

MySQL数据备份

一&#xff0c;为什么要进行数据备份 备份&#xff1a;能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方。冗余&#xff1a; 数据有多份冗余&#xff0c;但不等备份&#xff0c;只能防止机械故障带来的数据丢失&#xff0c;例如…...

【Ai】CherryStudio 详细使用:本地知识库、MCP服务器

一、CherryStudio 介绍 Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。 Cherry Studio 高度自定义的设计、强大的扩展能力和友好的用户体验&#xff0c;使其成为专业用户和 AI 爱好者的理想选择。无论是零基础用户还是开发者&…...

STM32F103_HAL库+寄存器学习笔记17 - CAN中断接收 + 接收CAN总线所有报文

导言 如上所示&#xff0c;本实验的目的是使能CAN接收FIFO1的挂号中断&#xff0c;使用CAN过滤器0与CAN接收FIFO1的组合&#xff0c;接收CAN总线上所有的CAN报文。 如上所示&#xff0c;STM32F103有两个3级深度的接收FIFO。外设CAN想要正常接收CAN报文&#xff0c;必须配置接收…...

kafka报错:The Cluster ID doesn‘t match stored clusterId Some in meta.properties

kafka启动报错&#xff1a; ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) kafka.common.InconsistentClusterIdException: The Cluster ID kVSgfurUQFGGpHMTBqBPiw doesnt match stored clusterId Some(0Qftv9yBTAmf2iDPSl…...

QML 信号与槽

QML 信号与槽 QML 是 Qt 框架中用于构建现代化、流畅用户界面的声明式语言&#xff0c;其信号与槽&#xff08;Signals and Slots&#xff09;机制是实现组件间通信和交互的核心特性。与 C 的信号与槽类似&#xff0c;QML 的信号与槽提供了一种松耦合的方式&#xff0c;允许界…...

数据结构-栈

大家好&#xff0c;今天带来的是关于数据结构初阶中的栈和队列的内容&#xff0c;一起来看看吧&#xff01;&#xff01;&#xff01; 1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为…...

Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合

摘要 本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP&#xff0c;主要包含以下内容。 1. 一些 MCP 基础与快速体验&#xff08;熟悉的读者可以跳过此部分&#xff09; 2. 如何将自己开发的 Spring 应用发布为 MCP Server&#xff0c;验…...

CSS核心笔记001

目录 杂七杂八知识点样式优先级风格基本选择器通配符元素类ID 复合选择器交集选择器并集后代-孙子儿子兄弟属性各种属性选择器的应用 伪类动态伪类结构伪类否定伪类目标为类语言伪类UI伪类 伪元素 杂七杂八知识点 样式优先级 行内 > 内部 > 外部风格 紧凑风格基本选择…...