Flink大状态作业调优——DataStream篇

一、Flink 状态(State)简介

  在流式计算中有些操作一次处理一个独立的事件(比如解析一个事件), 有些操作却需要记住多个事件的信息(比如窗口操作)。那些需要记住多个事件信息的操作就是有状态的。流式计算分为无状态计算和有状态计算两种情况。状态可以理解为:历史数据(中间结果)

二、大状态作业导致的问题

   随着作业状态的持续膨胀,多个问题逐步显现,对作业的整体性能产生不利影响:

  1. 性能下降与作业反压:随着有状态算子状态的累积,I/O资源的瓶颈问题日益凸显,引发作业反压。这不仅增加了处理延迟,还导致吞吐量(TPS)降低。
  2. 资源利用效率低下:有状态算子的CPU资源常出现大量闲置,且随着状态规模的增长,资源浪费问题更加严重。
  3. 检查点与快照机制的时效性问题:状态规模的扩大使得检查点和快照过程更易超时,这不仅增加了作业重启后追赶数据的时间成本,也对端到端的 Exactly-once 语义的实现带来了额外延迟。
  4. 启动与扩缩容过程缓慢:在作业启动和扩缩容过程中,每个算子节点需从全量数据中恢复并重建本地数据库,这一过程的时间消耗与状态规模成正比。拥有大状态作业的状态加载往往成为启动和扩缩容执行速度的瓶颈,进而延长业务中断时间。

三、大状态作业诊断调优整体思路

在处理 Flink 作业时,如下这三类问题通常由大规模状态的管理和维护所引起:运行时性能减缓、检查点或快照超时问题以及作业启动和扩缩容过程缓慢。为了优化这些大状态作业,建议遵循以下步骤:

  1. 识别作业瓶颈:通过诊断工具结合具体业务产出情况,对作业目前的运行情况进行更为深入的了解,进而确定作业的性能瓶颈是否与状态管理有关。

  2. 采用更新的引擎版本:Flink在状态模块持续优化,最新版本的引擎通常具有更高的性能。阿里云实时计算的Flink企业版——Ververica Runtime (VVR),与 Apache Flink 完全兼容,并内置了专为流计算优化的状态存储 Gemini。Gemini 针对状态访问进行了设计,有效提升了性能、检查点和作业恢复能力,且参数自适应,无需手动配置。结合实时计算产品,VVR 为用户提供了企业级的优化体验,确保性能达到最佳。在进行性能调优前,请确保已采用最新版引擎和相关配置。

  3. 针对不同问题采取特定调优策略

    (1)运行时性能下降(作业反压):在这种情况下,调优应遵循以下顺序:首先优化SQL层,其次基于TTL(生存时间)减少状态数据,然后调整内存和并发资源以降低磁盘读取频率。

    (2)检查点或快照超时:在处理此类问题时,应先优化作业的运行时性能以减轻反压,接着优化同步阶段的性能,然后调整并发资源以降低单个并发任务的状态量,最后考虑使用原生快照功能来提高效率。

    (3)作业启动和扩缩容缓慢:如果本地磁盘资源充足,可以优先考虑启用状态本地恢复(Local Recovery)功能。同时,利用 Gemini 的懒加载特性和延迟剪裁技术,可以有效提升作业的启动和扩缩容速度。

四、Flink Datastream 作业大状态导致反压的调优原理与方法

4.1  基本原理

   Flink 支持 Operator State 和 Keyed State 两种状态,其中大状态问题通常由 Keyed State 引起。Flink Datastream API 支持通过显式的ValueStateListStateMapState等状态接口来维护 Keyed State,以及为其设置过期时间

4.2  问题诊断方法

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

4.3 调优方法

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

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

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

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

4.3.2 使用定时器进行状态清理

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

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

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

4.3.4 尽可能减少读盘

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

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

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

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

参考文章:

Flink⼤状态作业调优实践指南:Datastream 作业篇-阿里云开发者社区

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

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

相关文章

Word题库转Excel关键字快速查询题库

一、前言 内部培训会有Word版本题库,考核时如果使用Word、Excel、PDF等文档进行关键字查询题目体验不佳。so,撸个软件吧!   20240728更新:支持更多题库类型。 二、Word题库转Excel 1、Word题库格式要求 内容格式要求事例题目…

在 Postman 中设置全局 token

目录 问题描述解决方案 问题描述 在使用 Postman 进行接口测试时,经常会遇到在 Header 中添加 token 的情况。当接口数量较多时,需要为每个接口进行设置,而且当 token 失效时需要重新获取并设置,这样一来效率较低。 解决方案 下…

wpf中开发独立模块功能和左侧1个菜单的框架演示

此篇文章适用于有一定经验的wpf开发者,并且是团队协作开发模式,并且业务与此比较相近的话,用起来非常的方便。 我们在开发wpf程序的时候,比如1,2个人,那肯定随便怎么开发,都没事,代码…

Matlab M_map工具箱绘制Interrupted Mollweide Projection

GMT自带了许多的地图投影,但是对于Interrupted Mollweide投影效果却不好。 作为平替的m_map工具箱中带有的投影类型可完美解决这一问题。 Interrupted Mollweide Projection长这样 全球陆地 全球海洋 使用Matlab工具箱m_map展示全球海平面变化的空间分布 addpath(…

【Dart 教程系列第 49 篇】什么是策略设计模式?如何在 Dart 中使用策略设计模式

这是【Dart 教程系列第 49 篇】,如果觉得有用的话,欢迎关注专栏。 博文当前所用 Flutter SDK:3.22.1、Dart SDK:3.4.1 文章目录 一:什么是策略设计模式?二:为什么要使用策略设计模式&#xff1…

UG NX2406 安装教程

软件介绍 UG是一个交互式CAD/CAM(计算机辅助设计与计算机辅助制造)系统,它功能强大,可以轻松实现各种复杂实体及造型的建构。 它在诞生之初主要基于工作站,但随着PC硬件的发展和个人用户的迅速增长,在PC上的应用取得了迅猛的增长…

西蒙学习法

西蒙学习法 一根筋,挖死坑;会思考,持续不断的思考;会问问题,有深度的问题;一直想一个问题的解决办法; 资料 《世界十大学习方法》之西蒙学习法

【HarmonyOS】应用推送使用个推SDK如何实现?

【HarmonyOS】应用推送使用个推SDK如何实现? 前言 个推和极光都是市面上很成熟的推送第三方SDK了。今天讲讲个推SDK在鸿蒙中如何集成使用。 存在即合理,三方SDK推送给我们带来了极大的好处,首先在服务器后台处理一套API就可搞定&#xff0…

Matlab 命令行窗口默认输出(异常)

目录 前言Matlab 先验知识1 异常输出的代码2 正常输出的代码 前言 在单独调试 Matlab 写的函数时出现不想出现的异常打印值,逐个注释排查才找到是 if elseif else 代码块的问题,会默认打印输出 else 部分第一个返回值的值(下方代码中的 P值&…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-抄送服务处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为仿钉钉设计器里抄送人是一个服务任务&#xff0c;所以要根据这个服务任务进行处理 2、前端就是一个抄送&#xff0c;选择人 3、这里用了jeecg的选择人组件 <el-form-item prop…

昇思25天学习打卡营第10天|xiaoyushao

从今天开始做一些实践应用&#xff0c;今天分享的是FCN图像语义分割。 全卷积网络&#xff08;Fully Convolutional Networks&#xff0c;FCN&#xff09;是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图…

培养前端工程化思维,不要让一行代码毁了整个程序

看《阿丽亚娜 5 号&#xff08;Ariane 5&#xff09;火箭爆炸》有感。 1、动手写项目之前&#xff0c;先进行全局性代码逻辑思考&#xff0c;将该做的事情&#xff0c;一些细节&#xff0c;统一建立标准&#xff0c;避免为以后埋雷。 2、避免使用不必要或无意义的代码、注释。…

极简Springboot+Mybatis-Plus+Vue零基础萌新都看得懂的分页查询(富含前后端项目案例)

目录 springboot配置相关 依赖配置 yaml配置 MySQL创建与使用 &#xff08;可拿软件包项目系统&#xff09; 创建数据库 创建数据表 mybatis-plus相关 Mapper配置 ​编辑 启动类放MapperScan 启动类中配置 添加config配置文件 Springboot编码 实体类 mapperc(Dao…

【第一篇章】初识XGBoost 揭开神秘面纱

XGBoost发展历程 XGBoost显著优势 XGBoost核心概念 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种在机器学习领域广泛使用的集成学习算法&#xff0c;特别是在分类、回归和排序任务中表现出色。其基本原理建立在决策树、梯度提升和损失函数优化等核心概念之…

shell-awk命令详解

目录 一.概述 二.工作原理 三.工作流程 1.运行模式 2.运行流程 四.基本语法 1.命令格式 2.常用变量  五.变量类型 1.内建变量 2.内置变量 3.BEGIN END运算  4.awk高级用法 5.awk if语句 6.BEGIN END循环 一.概述 AWK是一种处理文本文件的语言&#xff0c;是一…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

国产大模型的逆袭:技术路径的策略与实践

〔探索AI的无限可能&#xff0c;微信关注“AIGCmagic”公众号&#xff0c;让AIGC科技点亮生活〕 一.聚焦长文本&#xff0c;国产大模型已有赶超GPT之势 1.1 理科能力差距较大&#xff0c;注重文科能力的提升 整体比较而言&#xff0c;国内大模型与GPT-4&#xff08;官网&…

树与二叉树【数据结构】

前言 之前我们已经学习过了各种线性的数据结构&#xff0c;顺序表、链表、栈、队列&#xff0c;现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一…

【计算机网络】ICMP报文实验

一&#xff1a;实验目的 1&#xff1a;掌握ICMP报文的各种类型及其代码。 2&#xff1a;掌握ICMP报文的格式。 3&#xff1a;深入理解TTL的含义&#xff08;Time to Live&#xff0c;生存时间&#xff09;。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器…

等级保护测评解决方案

什么是等级保护测评&#xff1f; 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安全…