【Flink实战】Flink网络内存和托管内存

文章目录

  • 一、 网络内存与托管内存
    • 1. 网络内存
      • 1.1. 网络内存的主要作用
      • 1.2. 网络内存配置项
    • 2. 托管内存
  • 二、 网络内存与托管内存的关系
    • 1 、互相依赖,优化执行性能
    • 2、 基于任务特性设置内存分配
    • 3、 内存竞争与背压机制

网络内存主要负责Taskmanager之间的网络数据传输的内存,托管内存主要负责Flink的状态计算,比如window等操作。

一、 网络内存与托管内存

1. 网络内存

网络内存:主要用于 任务间(不同的Taskmanager之间)的数据交换,特别是在 shuffle连接(join)聚合(aggregation) 等操作中。

数据进行网络传输时,需要用到网络内存进行缓冲。网络内存的大小决定了数据传输过程中可缓冲的数据量。如果网络内存不足,数据可能会被写入磁盘,影响性能。

 

1.1. 网络内存的主要作用

  1. 缓冲任务间数据
    Flink 在任务执行过程中需要频繁地进行数据交换,例如 Shuffle 操作、窗口操作等。网络内存提供了缓冲区来暂时存储数据,等待数据传输到下游任务。在没有足够的网络内存时,数据可能会被迫写入磁盘,导致性能下降。

  2. 支持数据 Shuffle
    Shuffle 操作是 Flink 中的一项核心操作,常见于流处理中的 repartitionjoingroup-by 等场景。数据通过网络从一个任务节点传输到另一个任务节点。在这个过程中,网络内存负责存储这些中间结果,避免了数据直接写入磁盘,提升了任务执行效率。

  3. 提高数据传输效率
    网络内存通过缓存传输中的数据,减少了频繁的磁盘 I/O 操作,从而提高了任务之间数据传输的速度。在高吞吐量的数据流处理应用中,减少 I/O 操作是提升性能的关键。

  4. 减少垃圾回收压力
    在 Flink 中,频繁的垃圾回收可能会导致任务停顿,影响作业的稳定性和实时性。通过合理配置网络内存,可以减少内存的分配和回收次数,缓解垃圾回收带来的性能瓶颈。

  5. 支撑背压机制(Backpressure)
    在高并发环境下,上游任务的速度可能超过下游任务的处理能力,这时 Flink 的背压机制会启动,流控下游任务的数据流速。背压机制依赖于网络内存的配置,以确保系统不会因数据流量过大而崩溃。

1.2. 网络内存配置项

具体代码位置:
org.apache.flink.configuration.NettyShuffleEnvironmentOptions

Flink 提供了一些配置项,用来调整和优化网络内存的使用。以下是几个常见的配置项及其作用:

  1. taskmanager.network.memory.fraction
    该配置项指定 TaskManager 可用内存的比例,用于网络操作。默认值是 0.1,即 Flink 会将 TaskManager 总内存的 10% 分配给网络内存。可以根据作业的规模和资源需求调整这个比例。

    taskmanager.network.memory.fraction: 0.2  # 设置为 20%,适用于高并发、高吞吐量的作业
    
  2. taskmanager.network.memory.min
    该配置项指定网络内存的最小值,确保无论 TaskManager 内存大小如何,都会为网络内存预留一定的空间。可以防止在内存资源较紧张时,网络内存不足导致的数据传输问题。

    taskmanager.network.memory.min: 256mb  # 最小网络内存为 256MB
    
  3. taskmanager.network.memory.max
    该配置项控制网络内存的最大值,确保不会因为网络内存过大导致其他任务操作内存不足。设置合理的上限可以避免因内存过度占用而导致的内存溢出问题。

    taskmanager.network.memory.max: 4gb  # 最大网络内存为 4GB
    
  4. taskmanager.network.buffer-size
    该配置项控制每个网络缓冲区的大小。缓冲区大小直接影响数据传输的效率。较大的缓冲区可以减少网络传输次数,但可能会增加内存占用。需要根据实际情况进行调整。

    taskmanager.network.buffer-size: 32kb  # 每个缓冲区大小为 32KB
    
  5. taskmanager.network.request.timeout
    设置网络请求的超时时间,单位为毫秒。此配置项决定了 Flink 在数据传输过程中等待响应的最长时间。如果超时,任务可能会失败或出现错误。

    taskmanager.network.request.timeout: 600000  # 网络请求超时时间为 10 分钟
    

 

2. 托管内存

托管内存的主要目的是为 计算和状态存储 提供内存资源:主要用于 算子状态存储计算,尤其是在 状态操作(如窗口、状态)中,管理任务的内部状态。

托管内存由 Flink 管理,通常是堆外内存,用于存储作业的 算子状态(例如,窗口计算的中间结果、流处理的状态等)。 它减少了堆内存的使用,防止频繁的垃圾回收,提高作业的稳定性。

 

二、 网络内存与托管内存的关系

1 、互相依赖,优化执行性能

状态管理与数据交换的平衡:作业的执行通常包含两部分内容:计算和数据交换。

  • 例如,当进行一个 window 操作时,状态会被托管内存存储,而在完成数据交换时,数据则需要通过网络内存进行缓冲。这两部分内存在作业的不同阶段发挥着不同的作用。
  • 再比如: 在一个 join 操作 中,数据会先通过网络内存传输,之后,可能会在下游任务中进行状态存储和计算,这时就需要使用托管内存。

内存溢出风险的平衡

过多地将内存分配给其中一部分(例如,网络内存)而忽略了另一部分(托管内存)可能导致内存资源的浪费或者性能瓶颈。

  • 如果网络内存配置得太小,任务间的数据传输可能会变慢,甚至会因为频繁的磁盘 I/O 导致性能下降。
  • 如果托管内存不足,状态管理可能会失效,导致状态溢出到磁盘,同样影响性能。

 

2、 基于任务特性设置内存分配

  • 不同的任务有不同的内存需求。例如,包含大量状态操作(如窗口、增量聚合等)的作业更依赖托管内存;
  • 含有大量数据交换(如大规模的 shuffle 或 join)的作业则需要更多的网络内存。

 

3、 内存竞争与背压机制

当上游任务的速度远快于下游任务时,背压机制通过网络内存控制数据流速,以避免网络拥塞。通过合理配置网络内存,可以更好地管理背压,避免任务阻塞。

在一些资源有限的环境中,网络内存和托管内存可能会争夺相同的资源。在这种情况下,Flink 会采用背压机制,控制数据流动速度,从而避免任务因内存不足而挂起。

 

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

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

相关文章

数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)

数据库驱动找起来好麻烦,我整理到了一起,需要的朋友免费下载:驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本,后续可能会分享更多。

【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本

背景 今天程序突然出了bug,无法自动测试了,显示Chrome版本不匹配,一看,Chrome居然在我已经关闭升级的情况下,又给我升级了,然后就悲剧了,我的代码不能用了。 于是,做了以下几步&…

网络运维学习笔记 017HCIA-Datacom综合实验01

文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置(IP二层VLAN链路聚合)ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…

出行项目案例

spark和kafka主要通过Scala实现,Hadoop和HBase主要基于java实现。 通过该项目,主要达到以下目的: (1)通用的数据处理流程,入门大数据领域 (2)真实体验大数据开发工程师的工作 &a…

2.21力扣-回溯组合

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 一&#xff1a;JAVA class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> ans new LinkedList<>();public List<List<Integer>> combine(int n, int k)…

智能合约的部署

https://blog.csdn.net/qq_40261606/article/details/123249473 编译 点击图中的 “Compile 1_Storage.sol” 存和取一个数的合约&#xff0c;remix自带 pragma solidity >0.8.2 <0.9.0; /*** title Storage* dev Store & retrieve value in a variable* custom:d…

vmvare kali如何配置桥接模式进行上网

注意点:虚拟机可以PING通物理机,但是PING不通其他的网站。经过收集资料,得知由于是校园网连接,所以DHCP只能分配一个授权的IP地址给连接的主机,由于KALI是桥接物理机,物理机已经获得了这个授权的IP,所以导致桥接的虚拟机无法上网。所以不是因为配置的有问题,而是网络的…

了解Python中的SciPy库

么是 SciPy&#xff1f; SciPy&#xff08;发音为“Sigh Pie”&#xff09;是 Scientific Python 的首字母缩写词&#xff0c;它是 Python 的开源库&#xff0c;用于科学和技术计算。它是 Python 编程语言中称为 Numpy 的基本数组处理库的扩展&#xff0c;旨在支持高级科学和工…

python网络安全怎么学 python做网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 众所周知&#xff0c;python是近几年比较火的语言之一&#xff0c;它具有简单易懂、免费开源、可移植、可扩展、丰富的第三方库函数等特点&#xff0c;Java需要大…

Ubuntu下mysql主从复制搭建

本文介绍mysql 8.4主从集群的搭建&#xff0c;从单个机器安装到集群的配置&#xff0c;整体走了一遍&#xff0c;希望对大家有帮助。mysql 8.4和之前的版本命令上有些变化&#xff0c;大家用来参考。 0、环境 ubuntu&#xff1a; 22.04mysql&#xff1a;8.4 1、安装mysql 1…

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

Spring Boot框架总结(超级详细)

前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等&#xff0c;如果能耐心看完&#xff0c;想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念&#xff1a; 约定优于配置&#…

易基因: ChIP-seq+DRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR

原文&#xff1a;ChIP-seqDRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性&#xff5c;NAR 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 在饥饿等能量胁迫条件下&#xff0c;生物体会通过调整…

uniapp h5端和app端 使用 turn.js

前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…

MySQL数据库(3)—— 表操作

目录 一&#xff0c;创建表 1.1 创建表的SQL 1.2 演示 二&#xff0c;查看表 三&#xff0c;修改表 四&#xff0c;删除表 常用的表操作会涉及到两种SWL语句 DDL&#xff08;Data Definition Language&#xff09;数据定义语言&#xff1a;建表、改表、删表等&#xff0…

【精调】LLaMA-Factory 快速开始4 自定义个一个sharegpt数据集并训练

数据格式说明 LLaMA Factory:微调LLaMA3模型实现角色扮演 数据集 参考 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一) 大神给出的数据集的讲解:注册 如

Unity 位图字体

下载Bitmap Font Generator BMFont - AngelCode.com 解压后不用安装直接双击使用 提前设置 1、设置Bit depth为32 Options->Export options 2、清空所选字符 因为我们将在后边导入需要的字符。 Edit->Select all chars 先选择所有字符 Edit->Clear all chars i…

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上&#xff0c;请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

Servlet概述(Ⅰ)

目录 一、Servlet概述 演示 创建JavaWeb项目&#xff08;2017版本为例&#xff09; 1. 打开 IntelliJ IDEA 2. 选择项目类型 3. 配置框架 二、Servlet初识(熟练) 1.servlet说明 2.Servlet 接口方法 3.创建Servlet 4.JavaWeb请求响应流程 ​编辑 ​编辑 5.servlet…

Spring Cloud — Hystrix 服务隔离、请求缓存及合并

Hystrix 的核心是提供服务容错保护&#xff0c;防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式&#xff0c;对资源或失败单元进行隔离&#xff0c;避免一个服务的失效导致整个系统垮掉&#xff08;雪崩效应&#xff09;。 1 Hystrix监控 Hystrix 提供了对服务…