【实时计算 Flink】DataStream作业大状态导致反压的调优原理与方法

news2024/12/24 10:53:52

状态管理不仅影响应用的性能,还关系到系统的稳定性和资源的有效利用。如果状态管理不当,可能会导致性能下降、资源耗尽,甚至系统崩溃。Flink Datastream API在状态管理方面提供了非常灵活的接口,您可以采取相关措施来确保状态大小可控,避免状态的无限制增长。

基本原理

Flink支持Operator State和Keyed State两种状态,其中大状态问题通常由Keyed State引起。Flink DataStream API支持通过显式的ValueState、ListState、MapState等状态接口来维护Keyed State,以及为其设置过期时间,详情请参见状态相关介绍。

问题诊断方法

在Flink作业存在性能瓶颈时,系统往往表现出明显的反压现象。这种反压可能由多种因素引起,但主要的原因之一是作业状态规模的持续膨胀,直至超出内存限制。此时,状态存储引擎会将部分不频繁使用的状态数据移至磁盘,而磁盘与内存在数据存取速度上的巨大差异,使得磁盘IO操作成为数据处理效率的瓶颈。尤其在Flink的计算过程中,如果算子频繁地从磁盘读取状态数据,将显著增加作业的延迟,降低整体处理速度,成为性能问题的根源。

为了准确识别是否由状态访问引发反压,需要对作业的运行状态和算子行为进行深入分析。利用监控工具追踪和诊断性能瓶颈,可以有效地发现并解决由状态访问引起的性能问题,从而提升Flink作业的性能。

实时计算开发控制台集成了多种分析工具(如下表所示),结合智能诊断与自动调优功能,形成了初步的大状态作业问题诊断与自动调优能力,在定位和解决大规模状态作业的性能瓶颈方面发挥着重要作用。

工具

用途

使用方式

Thread Dump

查看当前时刻的算子线程是否主要在访问State。

具体操作请参见查看作业性能。

线程动态

抽样查看一段时间内的线程动态是否主要在访问State。

CPU火焰图

查看一段时间内的CPU时间占比大头是否在访问State。

查看运行监控指标

通过查看State Size相关指标判断状态大小和IO情况。

在状态总览页签,单击操作栏中的指标,进入指标页面。

image

重点观察以下指标:

  • State Size(Gemini Only):运行时单并发的状态大小。

  • LastCheckPointFullSize:最近一个Checkpoint的全量大小,可以用来大致估算整体作业的状态大小。

  • State Access Latency(需要额外开启):当单个State访问达到毫秒级,需要重点关注状态访问的性能,详情请参见State。

调优方法

确认业务逻辑,合理设计状态

在使用Flink进行状态管理时,首先需要审视业务逻辑。合理设计状态结构和存储内容是控制状态增长的关键。仅存储业务所需的最小化状态信息,有利于避免状态的无限增长。

设置合理状态生命周期减小状态大小

Flink提供了丰富的状态时间特性,例如ValueStateDescriptor的setTTL方法,可以设置状态的生命周期,确保状态在一定时间后自动过期并被清除。同时,也可以直接调用clear()或remove()方法,显式删除不再需要的状态条目。利用这些特性,可以有效控制状态规模。

使用定时器进行状态清理

除了依赖状态的时间特性,还可以利用Flink的定时器机制,定期触发状态的清理操作。通过设置合理的定时器触发时间,可以确保过期状态及时被清理,避免状态无限增长。这种主动清理状态的方法,可以更精细地控制状态的生命周期。

进行必要的监控与日志输出,同时定期分析状态文件

在状态管理过程中,需要持续监控状态大小和状态后端的性能指标,及时发现异常情况。同时,记录详细的日志信息,有助于在出现问题时快速定位和解决。除此之外,定期分析状态文件,也能够提供系统运行的历史数据,有助于识别作业模式和预测可能的风险点,为进一步优化状态管理提供依据。

尽可能减少读盘

通过减少磁盘读取次数并优化内存使用,可以提升系统性能。以下是针对不同情况的具体策略:

  • 优化内存

    在保证系统总资源不受影响的前提下,可以重新分配内存资源,将更多的内存分配给托管内存(Managed Memory)。这样做可以有效提升内存的命中率,从而减少对磁盘的依赖。具体操作时,应确保其他内存资源充足,以免影响系统的其他部分。

  • 配置资源

    在进行资源配置时,应优先考虑增加内存资源。通过为存储引擎分配更多的托管内存,可以进一步提高内存命中率,减少对磁盘的读取需求。这种方法在细粒度资源管理中尤为重要,因为它允许更精确地控制资源分配,以达到最佳的性能表现。

  • 提高并发处理能力

    通过增加并发处理的数量,可以降低单个并发任务的状态量,从而减少需要写入磁盘的数据量。这种方法可以有效地减少磁盘I/O操作,提高整体的数据处理效率。

下表展示不同使用场景下,采取的调优方法以及具体操作步骤:

使用场景

调优方法

具体操作

注意事项

当Heap等其他内存资源余量较多时

调整内存资源比例,提供更多内存资源给Managed Memory。

配置运行参数taskmanager.memory.managed.fraction,该参数默认值是0.4,适当增加该参数可以将更多内存资源用于实际状态数据存储,详情参见参数说明和配置说明。

需要确保其他内存资源够用,否则会导致频繁垃圾回收(Full GC),从而导致性能下降。

所有场景

增加内存。

在资源配置中增加内存和并发,详情请参见配置作业资源。

无。

增加并发。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word粘贴时出现“文件未找到:MathPage.WLL”的解决方案

解决方案 一、首先确定自己电脑的位数(这里默认大家的电脑都是64位)二、右击MathType桌面图标,点击“打开文件所在位置”,然后分别找到MathPage.WLL三、把这个文件复制到该目录下:C:\Program Files\Microsoft Office\r…

Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源

Ubuntu 是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 和它一样的还有 kali(一款渗透测试软件) Debian-kali 小白参考 :Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.5k次,点赞…

vue3.0 + vite:中使用 sass

1、安装依赖 npm i sass sass-loader --save-dev 在项目的src/assets文件夹下新建style/index.scss 文件 2、在 vite.config.ts 中加: resolve: {alias: {: fileURLToPath(new URL(./src, import.meta.url))} }, css: {// 配置 SCSS 支持preprocessorOptions: {s…

Mybatis Plus连接使用ClickHouse也如此简单

通过阅读列式数据库ClickHouse官网&#xff0c;不难看出它有支持JDBC规范的驱动jar包&#xff0c;可以直接集成到Object Relational Mapping框架等&#xff0c;下面我用SpringBootMybatisPlus环境连接ClickHouse来演示一下 集成步骤 1.Maven引入ClickHouse提供的JDBC依赖 <…

解决海外社媒风控问题的工具——云手机

随着中国企业逐步进入海外市场&#xff0c;海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下&#xff0c;云手机作为一种新型技术解决方案&#xff0c;正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控&#xff0c;企业经常面临账号流…

linux驱动-platform子系统

目录 1.传统字符设备驱动框架的缺点 2.总线、设备、驱动 3.设备注册 4.驱动注册 1.传统字符设备驱动框架的缺点 缺点&#xff1a;驱动可移植性差&#xff0c;原因是驱动里面包括了很多该芯片特有的消息&#xff0c;如果是其他平台&#xff0c;硬件信息会有差异&#xff0c;…

七、Linux 之用户管理

基本介绍 Linux 系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 添加用户 useradd 用户名添加一个用户 milan, 默认该用户的家目录在 /home/milan 细节说…

深入Postman- 自动化篇

前言 在前两篇博文《Postman使用 - 基础篇》《玩转Postman:进阶篇》中,我们介绍了 Postman 作为一款专业接口测试工具在接口测试中的主要用法以及它强大的变量、脚本功能,给测试工作人员完成接口的手工测试带来了极大的便利。其实在自动化测试上,Postman 也能进行良好的支…

【特赞-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

SQL分类中的DDL

DDL&#xff08;Data Definition Language):数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;。 一、DDL语句操作数据库 1、查询所有数据库&#xff1a;show databases&#xff1b;&#xff08;一般用大写&#xff…

自动化——RPA——影刀——批量刷视频

前言 影刀底层是python https://www.yingdao.com/ 需求 实现视频集的定时点击和播放。 要点 第一步&#xff1a;将需要播放的视频链接放到excel中&#xff0c;excel的名字自定义&#xff0c;本文为“批量刷视频”。 第二步&#xff1a;使用影刀的“打开/新建Excel”功能&…

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车&#xff0c;搭载EA211发动机和手自一体变速器&#xff0c;累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡&#xff0c;车速最高约50 km/h&#xff0c;且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…

Centos7快速安装配置RabbitMQ

1. 卸载现有的 RabbitMQ 和 Erlang&#xff08;可选&#xff09; # 停止 RabbitMQ 服务 sudo systemctl stop rabbitmq-server# 卸载 RabbitMQ sudo yum remove -y rabbitmq-server# 卸载 Erlang sudo yum remove -y erlang# 删除 RabbitMQ 残留文件 sudo rm -rf /var/lib/rab…

smartctl 设置硬盘的 write-caching

sg3 一、sg3查看缓存状态 您可以使用sg_modes命令来查看SAS盘和SATA盘的缓存状态。例如&#xff0c;要查看/dev/sdb设备的缓存状态&#xff0c;您可以执行以下命令&#xff1a; sg_modes -p 8,0 /dev/sdb 二、sg3关闭机械盘写缓存状态&#xff08;仅适用于SAS盘&#xff09…

ollama + fastgpt+m3e本地部署

ollama fastgptm3e本地部署 开启WSL更新wsl安装ubuntu docker下载修改docker镜像源开启WSL integration 安装fastgpt先创建一个文件夹来放置一些配置文件用命令下载fastgpt配置文件用命令下载docker的部署文件 启动容器M3E下载ollama下载oneapi配置登录oneapi配置ollama渠道配…

拥抱云原生

专题七&#xff1a;云原生实战72课时 专题简介&#xff1a; 云原生正在改变世界&#xff0c;新一代架构思想ServiceMesh、Serverless改变传统软件架构模式&#xff0c;本专题基于完全云上架构实战&#xff0c;结合微服务架构和云计算平台两者的优势&#xff0c;属于架构师必备…

LabVIEW智能可变温循环PCT测试系统

随着全球能源危机的加剧和环境保护需求的提升&#xff0c;开发和利用清洁能源已成为全球必然趋势。氢能作为一种高效的替代能源&#xff0c;正逐步受到关注。然而&#xff0c;储氢技术的研究至关重要&#xff0c;尤其是储氢材料的PCT&#xff08;Pressure-Composition-Temperat…

如何使用UART(STM32 HAL库)

UART &#xff08;通用异步收发器&#xff09;是在 USART &#xff08;通用同步异步收发器&#xff09;基础上裁剪掉了同步通信功能&#xff0c;只剩下异步通信功能。关于通信和串口的基本知识&#xff0c;可参见文章《串口通信简介-CSDN博客》和《数据通信的一些基础概念-CSDN…

红杉资本行业总结篇:生成式 AI 的发展

Datawhale干货 最新&#xff1a;红杉资本&#xff0c;全球著名风险投资公司 生成式 AI 的发展&#xff1a;从 “快思考” 到 “慢思考”&#xff0c;开启自主应用的新篇章。 在生成式 AI 革命的两年里&#xff0c;研究方向正从 “快思考”&#xff08;快速预训练响应&#xff…

Mysql(九) --- 事务

文章目录 前言1.什么是事务&#xff1f;2.事务的ACID特性3.为什么要使用事务&#xff1f;4.如何使用事务4.1.查看支持事务的 存储引擎4.2.语法4.3.开启一个事务&#xff0c;执行修改后回滚4.4.开启一个事务&#xff0c;执行修改后提交4.5.保存点4.6.自动/手动提交事务 5.事务的…