Flink Back Pressure

2024-09-06 21:58
文章标签 flink back pressure

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

什么是 Back Pressure


如果看到任务的背压警告(如 High 级别),这意味着 生成数据的速度比下游算子消费的的速度快。以一个简单的 Source -> Sink 作业为例。如果能看到 Source 有警告,这意味着 Sink 消耗数据的速度比 Source 生成速度慢。Sink 正在向 Source 施加反压。

许多情况都会导致背压。例如,GC导致传入数据堆积,或者数据源在发送数据的速度上达到峰值。如果没有正确处理反压力,可能会导致资源耗尽,甚至在最坏的情况下,数据丢失。


看一个简单的例子。假设数据流 pipeline(抽象为 Source,Streaming job 和 Sink)在稳定状态下以每秒500万个元素的速度处理数据,如下所示正常情况(一个黑色条代表100万个元素,下图表示系统1秒内的快照):


640?wx_fmt=other

No backpressure


如果 Source 发送数据的速度在某个时刻达到了峰值,每秒生成的数据达到了双倍,下游的处理能力不变:

640?wx_fmt=other

Backpressure


消息处理速度 < 消息的发送速度,消息拥堵,系统运行不畅。如何处理这种情况?


a. 可以去掉这些元素,但是,对于许多流应用程序来说,数据丢失是不可接受的。
b. 将拥堵的消息缓存起来,并告知消息发送者减缓消息发送的速度。消息缓存应该是持久的,因为在发生故障的情况下,需要重放这些数据以防止数据丢失。


640?wx_fmt=other

Buffer records


背压实现


采样线程

背压监测通过反复获取正在运行的任务的堆栈跟踪的样本来工作,JobManager 对作业重复调用 Thread.getStackTrace()


640?wx_fmt=other



如果采样(samples)显示任务线程卡在某个内部方法调用中,则表示该任务存在背压。

默认情况下,JobManager 每50ms为每个任务触发100个堆栈跟踪,来确定背压。在Web界面中看到的比率表示在内部方法调用中有多少堆栈跟踪被阻塞,例如,0.01表示该方法中只有1个被卡住。状态和比率的对照如下:

 
OK:0 <= Ratio <= 0.10	
LOW:0.10 <Ratio <= 0.5	
HIGH:0.5 <Ratio <= 1

为了不使堆栈跟踪样本对 TaskManager 负载过高,每60秒会刷新采样数据。


配置


可以使用以下配置 JobManager 的采样数:

  • web.backpressure.refresh-interval,统计数据被废弃重新刷新的时间(默认值:60000,1分钟)。

  • web.backpressure.num-samples,用于确定背压的堆栈跟踪样本数(默认值:100)。

  • web.backpressure.delay-between-samples,堆栈跟踪样本之间的延迟以确定背压(默认值:50,50ms)。


Web 显示


在 Flink WebUI 的作业界面中可以看到 Back Pressure 选项页面。


采样中  
表示 JobManager 对正在运行的任务触发堆栈跟踪采样。默认配置,大约会花费五秒钟。

640?wx_fmt=other

背压状态


运行正常状态


640?wx_fmt=other

背压状态


640?wx_fmt=other


对比 Spark streaming


Spark Streaming 的 back pressure 是从1.5版本以后引入。在之前版本,只能通过限制最大消费速度。这种限速的弊端很明显,假如下游处理能力超过了这个最大的限制,会导致资源浪费。而且需要对每个 Spark Streaming 作业进行压测预估,成本比较高。


从1.5版本开始引入了 back pressure,实现自动调节数据的传输速率,其监听所有作业的 onBatchCompleted 事件,并且基于 processingDelayschedulingDelay、当前批处理的记录条数以及处理完成事件来估算出一个速率,用于更新流每秒能够处理的最大记录的条数。会随着数据能力进行调整,来保证 Spark Streaming 流畅运行。


对比来看,Spark Streaming 的 back pressure 比较简单,主要是根据下游任务的执行情况等,来控制 Spark Streaming 上游的速率。Flink 的 back pressure 机制不通,通过一定时间内 stack traces 采样,监控阻塞的比率来确定背压的。


640?wx_fmt=gif

640?wx_fmt=jpeg

这篇关于Flink Back Pressure的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Flink任务重启策略

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

大数据之Flink(二)

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

是谁还不会flink的checkpoint呀~

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

Flink读取kafka数据并以parquet格式写入HDFS

《2021年最新版大数据面试题全面开启更新》 《2021年最新版大数据面试题全面开启更新》 大数据业务场景中,经常有一种场景:外部数据发送到kafka中,flink作为中间件消费kafka数据并进行业务处理;处理完成之后的数据可能还需要写入到数据库或者文件系统中,比如写入hdfs中; 目前基于spark进行计算比较主流,需要读取hdfs上的数据,可以通过读取parquet:spark.read

Apache-Flink深度解析-State

来源:https://dwz.cn/xrMCqbk5 Flink系列精华文章合集入门篇: Flink入门Flink DataSet&DataSteam APIFlink集群部署Flink重启策略Flink分布式缓存Flink重启策略Flink中的TimeFlink中的窗口Flink的时间戳和水印Flink广播变量Flink-Kafka-connetorFlink-Table&SQLFlink

Apache-Flink深度解析-Temporal-Table-JOIN

在《JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向大家详细介绍什么是Temporal Table JOIN。在ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。Temporal Table记录了历史上任何时间点所有的数据改动,Temporal Table的工作流程如下:

Flink 原理与实现:Operator Chain原理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

Flink原理与实现:如何生成ExecutionGraph及物理执行图

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

Flink原理与实现:Window的实现原理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

Flink原理与实现:详解Flink中的状态管理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇