【Flink精讲】Flink反压调优

2024-02-27 12:12
文章标签 flink 精讲 调优 反压

本文主要是介绍【Flink精讲】Flink反压调优,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flink 网络流控及反压的介绍:

Apache Flink学习网

反压的理解

        简单来说, Flink 拓扑中每个节点(Task)间的数据都以阻塞队列的方式传输,下游来不及消费导致队列被占满后,上游的生产也会被阻塞,最终导致数据源的摄入被阻塞。反压(BackPressure) 通常产生于这样的场景:短时间的负载高峰导致系统接收数据的速率远高于它处理数据的速率。许多日常问题都会导致反压,例如,垃圾回收停顿可能会导致流入的数据快速堆积,或遇到大促、秒杀活动导致流量陡增。

反压的危害

        反压如果不能得到正确的处理, 可能会影响到 checkpoint 时长和 state 大小,甚至可能会导致资源耗尽甚至系统崩溃。
        1)影响 checkpoint 时长: barrier 不会越过普通数据,数据处理被阻塞也会导致checkpoint barrier 流经整个数据管道的时长变长, 导致 checkpoint 总体时间(End to End Duration)变长。
        2)影响 state 大小: barrier 对齐时,接受到较快的输入管道的 barrier 后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的 barrier 也到达,这些被缓存的数据会被放到 state 里面,导致 checkpoint 变大。
        这两个影响对于生产环境的作业来说是十分危险的,因为 checkpoint 是保证数据一致性的关键, checkpoint 时间变长有可能导致 checkpoint 超时失败,而 state 大小同样可能拖慢 checkpoint 甚至导致 OOM (使用 Heap-based StateBackend)或者物理内存使用超出容器资源(使用 RocksDBStateBackend)的稳定性问题。
        因此,我们在生产中要尽量避免出现反压的情况。

利用 Flink Web UI 定位

        Flink Web UI 的反压监控提供了 SubTask 级别的反压监控, 1.13 版本以前是通过周期性对 Task 线程的栈信息采样,得到线程被阻塞在请求 Buffer (意味着被下游队列阻塞)的频率来判断该节点是否处于反压状态。默认配置下,这个频率在 0.1 以下则为 OK, 0.1至 0.5 为 LOW,而超过 0.5 则为 HIGH。
        Flink 1.13 优化了反压检测的逻辑(使用基于任务 Mailbox 计时,而不在再于堆栈采样),并且重新实现了作业图的 UI 展示: Flink 现在在 UI 上通过颜色和数值来展示繁忙和反压的程度。

分析瓶颈算子

        如果处于反压状态,那么有两种可能性:
        (1) 该节点的发送速率跟不上它的产生数据速率。这一般会发生在一条输入多条输出的 Operator(比如 flatmap)。 这种情况,该节点是反压的根源节点,它是从 Source Task到 Sink Task 的第一个出现反压的节点。
        (2) 下游的节点接受速率较慢,通过反压机制限制了该节点的发送速率。 这种情况,需要继续排查下游节点,一直找到第一个为 OK 的一般就是根源节点。总体来看,如果我们找到第一个出现反压的节点,反压根源要么是就这个节点,要么是它紧接着的下游节点。
        通常来讲,第二种情况更常见。 如果无法确定,还需要结合 Metrics 进一步判断。 

利用 Metrics 定位

        监控反压时会用到的 Metrics 主要和 Channel 接受端的 Buffer 使用率有关,最为有用的是以下几个 Metrics:

        其中 inPoolUsage = floatingBuffersUsage + exclusiveBuffersUsage。

1)根据指标分析反压
分析反压的大致思路是:如果一个 Subtask 的发送端 Buffer 占用率很高,则表明它
被下游反压限速了;如果一个 Subtask 的接受端 Buffer 占用很高,则表明它将反压传导
至上游。反压情况可以根据以下表格进行对号入座(1.9 以上):

2) 可以进一步分析数据传输
Flink 1.9及以上版本,还可以根据 floatingBuffersUsage/exclusiveBuffersUsage 以及其上游 Task 的 outPoolUsage 来进行进一步的分析一个 Subtask 和其上游Subtask 的数据传输。
在流量较大时, Channel 的 Exclusive Buffer 可能会被写满,此时 Flink 会向 Buffer Pool 申请剩余的 Floating Buffer。这些 Floating Buffer 属于备用 Buffer。

总结:
        1) floatingBuffersUsage 为高, 则表明反压正在传导至上游
        2) 同时 exclusiveBuffersUsage 为低, 则表明可能有倾斜
        比如, floatingBuffersUsage 高、 exclusiveBuffersUsage 低为有倾斜,因为少数channel 占用了大部分的 Floating Buffer。 

这篇关于【Flink精讲】Flink反压调优的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752344

相关文章

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

Linux系统性能调优详解

前言 在服务器运维和管理中,Linux系统的性能调优是确保服务稳定性和响应速度的关键。通过对系统进行细致的调优,可以显著提升处理能力,优化资源利用率。本文将详细介绍Linux性能调优的多个方面,包括系统监控、磁盘优化、内存管理、网络配置等,并提供实用的技巧和工具。 简介 Linux性能调优是一个涉及多个层面的复杂过程,旨在确保系统资源得到最佳利用,从而提高整体性能和响应速度。 调优实践

高性能计算应用优化之代码实现调优(一)

本章将介绍代码实现过程中使用到的调优方法。在软件开发早期,开发者更多关注代码功能的实现,对代码的性能关注较少,随着代码规模增加,不合理的代码实现方法所带来的性能包袱逐渐凸显。因此,需要对原有代码实现进行优化,如修改不合理的访存顺序,使代码更易于被编译器优化等。 浮点数运算 浮点数运算是科学计算中开销最大的部分之一,特别是双精度除法,合理地设计实现浮点数运算环节可以显著提高程序的性能。 由于单

大数据之Flink(二)

4、部署模式 flink部署模式: 会话模式(Session Mode)单作业模式(Per-Job Mode)应用模式(Application Mode) 区别在于集群的生命周期以及资源的分配方式;以及应用的main方法到底在哪里执行。 4.1、会话模式 先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时资源已经确定,所有提交的作业会晶振集群中的资源。适合规模小、执

经验笔记:SQL调优

SQL调优经验笔记 引言 SQL调优是确保数据库系统高效运行的重要环节。通过对查询语句、数据库配置、硬件资源等方面进行优化,可以显著提升数据库性能,进而增强应用程序的整体表现。以下是基于常见调优手段和实践经验整理的一份经验笔记。 1. 查询语句优化 1.1 避免使用SELECT * 只选择需要的列,减少不必要的数据传输。 示例: -- 不推荐SELECT * FROM users WH

是谁还不会flink的checkpoint呀~

1、State Vs Checkpoint State:状态,是Flink中某一个Operator在某一个时刻的状态,如maxBy/sum,注意State存的是历史数据/状态,存在内存中。 Checkpoint:快照点, 是Flink中所有有状态的Operator在某一个时刻的State快照信息/存档信息 一句话概括: Checkpoint就是State的快照 目的:假设作业停止了,下次启动的