面试题:flink反压机制及与sparkstreaming的区别(代码片段)

宝哥大数据[离职找工作中,大佬帮内推下] 宝哥大数据[离职找工作中,大佬帮内推下]     2023-01-06     170

关键词:

文章目录

一、背压

1.1、背压机制产生的背景

背压(back pressure)机制主要用于解决流处理系统中,业务流量在短时间内剧增,造成巨大的流量毛刺,数据流入速度远高于数据处理速度,对流处理系统构成巨大的负载压力的问题。

如果不能处理流量毛刺或者持续的数据过高速率输入,可能导致Executor端出现OOM的情况或者任务崩溃。

二、SparkStreaming的背压机制

2.1、spark1.5之前

就是 通过限制最大消费速度(这个要人为压测预估)

2.1.1、receiver模式

可以配置spark.streaming.receiver.maxRate参数来限制每个receiver没每秒最大可以接收的数据量

2.1.2、direct模式

可以配置 spark.streaming.kafka.maxRatePerPartition 参数来限制每个kafka分区最多读取的数据量。

2.1.3、缺点

  • 实现需要进行压测,来设置最大值。参数的设置必须合理,如果集群处理能力高于配置的速率,则会造成资源的浪费。
  • 参数需要手动设置,设置过后必须重启streaming服务。

2.2、spark1.5之后

新版的背压机制不需要手动干预,spark streaming 能够根据当前数据量以及集群状态来预估下个批次最优速率。

2.2.1、一些相关的参数

  • 开启背压机制:设置spark.streaming.backpressure.enabled 为true,默认为false
  • 启用反压机制时每个接收器接收第一批数据的初始最大速率。默认值没有设置 spark.streaming.backpressure.initialRate
  • 速率估算器类,默认值为 pid ,目前 Spark 只支持这个,大家可以根据自己的需要实现 spark.streaming.backpressure.rateEstimator
  • 用于响应错误的权重(最后批次和当前批次之间的更改)。默认值为1,只能设置成非负值。weight for response to “error” (change between last batch and this batch) spark.streaming.backpressure.pid.proportional
  • 错误积累的响应权重,具有抑制作用(有效阻尼)。默认值为 0.2 ,只能设置成非负值。weight for the response to the accumulation of error. This has a dampening effect. spark.streaming.backpressure.pid.integral
  • 对错误趋势的响应权重。 这可能会引起 batch size 的波动,可以帮助快速增加/减少容量。默认值为0,只能设置成非负值。weight for the response to the trend in error. This can cause arbitrary/noise-induced fluctuations in batch size, but can also help react quickly to increased/reduced capacity. spark.streaming.backpressure.pid.derived
  • 可以估算的最低费率是多少。默认值为 100,只能设置成非负值。 spark.streaming.backpressure.pid.minRate

三、Flink背压机制

flink 的背压特性是逐渐反向背压,从下游的算子开始逐渐排查是哪个算子处理数据处理不过来了。 然后上游减缓发送速度。当fink自动逐级背压处理不过来的时候就需要人为手动来干预了。

3.1、背压实现

3.1.1、采样线程

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

下面是官方提供的示意图:

3.1.2、Sample

如果采样(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秒会刷新采样数据。

3.1.3、配置

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

  • web.backpressure.refresh-interval,统计数据被废弃重新刷新的时间(默认值:60000,1分钟)。
  • web.backpressure.num-samples,用于确定背压的堆栈跟踪样本数(默认值:100)。
  • web.backpressure.delay-between-samples,堆栈跟踪样本之间的延迟以确定背压(默认值:50,50ms)。

3.2、如何定位背压

3.2.1、在web页面发现fink的checkpoint生成超时, 失败。

3.2.2、查看jobmanager日志

3.2.3、 BackPressure界面

背压状态可以大致锁定背压可能存在的算子,但具体背压是由于当前Task自身处理速度慢还是由于下游Task处理慢导致的,需要通过metric监控进一步判断。

**原理:**BackPressure界面会周期性的对Task线程栈信息采样,通过线程被阻塞在请求Buffer的频率来判断节点是否处于背压状态。计算缓冲区阻塞线程数与总线程数的比值 rate。其中,rate < 0.1 为 OK,0.1 <= rate <= 0.5 为 LOW,rate > 0.5 为 HIGH。

3.2.4、Metrics 监控背压

缓冲区的数据处理不过来,barrier流动慢,导致checkpoint生成时间长, 出现超时的现象。input 和 output缓冲区都占满。

3.3、背压影响

首先,背压不会直接导致系统的崩盘,只是处在一个不健康的运行状态。

(1)背压会导致流处理作业数据延迟的增加。

(2)影响到Checkpoint,导致失败,导致状态数据保存不了,如果上游是kafka数据源,在一致性的要求下,可能会导致offset的提交不上。

原理: 由于Flink的Checkpoint机制需要进行Barrier对齐,如果此时某个Task出现了背压,Barrier流动的速度就会变慢,导致Checkpoint整体时间变长,如果背压很严重,还有可能导致Checkpoint超时失败。

(3)影响state的大小,还是因为checkpoint barrier对齐要求。导致state变大。

原理: 接受到较快的输入管道的barrier后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的barrier也到达。这些被缓存的数据会被放到state 里面,导致state变大。

3.4、如何解决背压现象?

Flink不需要一个特殊的机制来处理背压,因为Flink中的数据传输相当于已经提供了应对背压的机制。所以只有从代码上与资源上去做一些调整。

(1)背压部分原因可能是由于数据倾斜造成的,我们可以通过 Web UI 各个 SubTask 的 指标值来确认。Checkpoint detail 里不同 SubTask 的 State size 也是一个分析数据倾斜的有用指标。解决方式把数据分组的 key 预聚合来消除数据倾斜。

(2)代码的执行效率问题,阻塞或者性能问题。

(3)TaskManager 的内存大小导致背压。

四、对比总结

参考:
https://blog.csdn.net/may_fly/article/details/103922862
https://www.zhihu.com/question/345381979

面试题:flink反压机制及与sparkstreaming的区别(代码片段)

文章目录一、背压1.1、背压机制产生的背景二、SparkStreaming的背压机制2.1、spark1.5之前2.1.1、receiver模式2.1.2、direct模式2.1.3、缺点2.2、spark1.5之后2.2.1、一些相关的参数三、Flink背压机制3.1、背压实现3.1.1、采样线程3.1.2、Sample3.1.3、... 查看详情

大数据面试题系列一

HadoopHive1、Hive-SQL查询连续活跃登录用户思路详解2、页面停留时长LEAD和LAGKafkaHbaseSpark1、Spark的Cache和Checkpoint区别和联系2、Spark参数调优3、Spark数据倾斜4、GC导致的Shuffle文件拉取失败Flink1、Flink中的Checkpoint和Spark中的Checkpoint区别2... 查看详情

flinkflink反压机制导致checkpoint失败

...checkpoint的,后期越来越不能够做checkpoint的情况总结2.反压问题2.1什么是反压(如下图1所示)?图2-1部分算子反压表现(webui)2.2.flink中反压机制是干什么的?​flink中的反压机制是flink中由于个别算子接收receive数... 查看详情

反压策略

...容:网络流控的概念与背景TCP的流控机制FlinkTCP-based反压机制1.5之前FlinkCredit-based反压机制1.5及以后总结与思考网络流控的概念与背景为什么需要网络流控当我们Pr 查看详情

大数据面试题——flink面试题

1、简单介绍一下FlinkFlink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且Flink提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务:DataSetAPI... 查看详情

flink从入门到精通100篇(二十二)-flink应用实战案例:如何实现网络流控与反压机制

...要网络流控?FlinkV1.5版之前网络流控介绍FlinkV1.5版之前的反压策略存在的问题Credit的反压策略实现原理,Credit是如何解决Flink1.5之前的问题?对比spark,都说flink延迟低,来一条处理一条,真是这样吗?其实Flink内部也有Buffer机制... 查看详情

flink网络流控和反压剖析详解

...下:网络流控的概念与背景TCP的流控机制FlinkTCP-based反压机制(beforeV1.5ÿ 查看详情

最全的大数据面试系列flink面试题大全

...x1f680;专栏简介:本专栏主要分享收集的大数据相关的面试题,涉及到Hadoop,Spark,Flink,Zookeeper,Flume,Kafka,Hive,Hbase等大数据相关技术。大数据面试专栏地址。🚀个人主页:大数据小... 查看详情

最全的大数据面试系列flink面试题大全

...x1f680;专栏简介:本专栏主要分享收集的大数据相关的面试题,涉及到Hadoop,Spark,Flink,Zookeeper,Flume,Kafka,Hive,Hbase等大数据相关技术。大数据面试专栏地址。🚀个人主页:大数据小... 查看详情

flink限流

...得太慢了,可能ES内部没有很好的限流机制,没有办法把反压传播回来,而是比较暴力地整个socket都无法连接了,可能是它内部负载非常高,瞬间给它非常高的压力,它没有把这个压力通过反压机制给传回来。怎么处理?即使有... 查看详情

flink面试题汇总

1,简单介绍一下FlinkFlink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且Flink提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务ÿ... 查看详情

面试题

注:所有答案来源于网络,仅做整理!!flink的高可用flink是一种高性能、分布式处理大规模数据的流处理框架,其主要特点是具有高可用性和可扩展性。flink集群高可用性是指在出现故障的情况下,系统能够自动切换到备用节点... 查看详情

flinkflink反压源码分析-flink如何实现反压的(代码片段)

...概述2.小结1.概述在FlinkUI:Flink1.10如何查看数据源的背压(反压)情况(消费kafka)中我们学会了如何查看反压。在【Flink】Flink反压(背压)网络流控这里我们对反压有了一个整体的认识。在这篇文章中,我们一直没有去研究代码... 查看详情

大数据面试题——flink面试题

1Flink是如何支持批流一体的?本道面试题考察的其实就是一句话:Flink的开发者认为批处理是流处理的一种特殊情况。批处理是有限的流处理。Flink使用一个引擎支持了DataSetAPI和DataStreamAPI。2Flink是如何做到高效的数据交换的?在... 查看详情

记一次flink反压问题排查过程

...情况最终发现,source->watermarks->filter端三个subtask反压都显示High重启多次,问题依然存在。反压的定位正常任务checkpoint时间端发现非常短反压任务大约可以看出来checkpoint做的时 查看详情

关于flink反压

参考技术A什么是反压:算子的sub_task需要处理的数据量>能够处理的数据量反压的危害:1.任务处理性能出现瓶颈   2.Checkpoint时间长或者失败(barrier要花很长时间对齐)3.整个任务会卡住如何判断出现反压:反压主要... 查看详情

【flink精选】如何分析及处理反压?

参考技术A反压(backpressure)是流式计算中十分常见的问题。反压意味着数据管道中某个节点成为瓶颈,处理速率跟不上上游发送数据的速率,而需要对上游进行限速。由于实时计算应用通常使用消息队列来进行生产端和消费端... 查看详情

面试指北|图解flink的checkpoint机制(代码片段)

Flink是一个分布式的流处理引擎,而流处理的其中一个特点就是7X24。那么,如何保障Flink作业的持续运行呢?Flink的内部会将应用状态(state)存储到本地内存或者嵌入式的kv数据库(RocksDB)中,由于采用的是分布式架构,Flink需要对本... 查看详情