Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控

摘要:
这意味着Sink消耗数据的速度比Source慢。Streamingjob和Sink)以每秒500万个元素的速度在稳定状态下处理数据。如果源发送数据的速度在某个时间达到峰值,b.缓存拥塞的消息。第二个背压通过重复获得正在运行的任务的堆栈跟踪样本,使得采样线程背压监测能够工作。如果示例显示任务线程卡在内部方法调用中。

来源:https://mp.weixin.qq.com/s/xA0TTSiIoFlzv0PKQheuWA

一 什么是 Back Pressure

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

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

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

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第1张

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

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第2张

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

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

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第3张

二 背压实现

采样线程

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

 Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第4张

如果采样(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 对正在运行的任务触发堆栈跟踪采样。默认配置,大约会花费五秒钟。

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第5张

背压状态

运行正常状态

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第6张

 背压状态

Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控第7张

四 对比 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 采样,监控阻塞的比率来确定背压的。

免责声明:文章转载自《Flink实战(八十九):监控(六)Flink Back Pressure(背压)实现与监控》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt Designer常用部件介绍Javascript 刷新框架及页面的方法总集下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

《转》事务对数据库的重要性

所谓事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。   事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:    BEGIN TRANSACTION    COMMIT    ROLLBACK   事务通常是以BEGIN TRAN...

磁盘 I/O 性能监控指标和调优方法

在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能。 磁盘 I/O 性能监控的指标主要包括: 指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指...

Windows 的 80 端口被 System 进程占用解决方案

通过 Windows 的资源监视器(win+R:resmon)可以看到 80 端口已经被占用,下图是已经解决好了,没能截图被占用的情况,下面给出解决方案。 查看解决方案请直接跳转到第2节。 1、使用 windows 工具/命令查看端口占用情况 PS:贴出两个好用的 windows cmd 命令 查看占用端口程序的 PID(最后一列代表 PID): n...

OpenGL学习随笔(一)-- CPU和GPU的设计区别

CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。 于是CPU和GPU就呈现出非常不同的架构(示...

MySql数据类型

MySql数据类型 1.整型(xxxint) MySQL数据类型 含义 tinyint(m) 1个字节表示(-128~127) smallint(m) 2个字节表示(-32768~32767) mediumint(m) 3个字节表示(-8388608~8388607) int(m) 4个字节表示(-2147483648~21474836...

R语言数据挖掘方法及应用

R语言数据挖掘方法及应用 第1篇 起步篇:R语言数据挖掘入门并不难 1 数据挖掘与R语言概述 1.1 为什么要学习数据挖掘和R语言 1.2 什么是数据挖掘 1.3 数据挖掘能给出什么 1.3.1 数据挖掘结果有哪些呈现方式 1.3.2 数据挖掘结果有哪些基本特征 1.4 数据挖掘能解决什么问题 1.4.1 数据预测 1.4.2 发现数据的内在结构 1.4....