iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >flink和spark Streaming中Back Pressure的示例分析
  • 359
分享到

flink和spark Streaming中Back Pressure的示例分析

2023-06-19 11:06:02 359人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关flink和spark Streaming中Back Pressure的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spark Streaming的back pres

这篇文章将为大家详细讲解有关flinkspark Streaming中Back Pressure的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Spark Streaming的back pressure

在讲flink的back pressure之前,我们先讲讲Spark Streaming的back pressure。Spark Streaming的back pressure出现的原因呢,我想大家应该都知道,是为了应对短期数据尖峰。Spark Streaming的back pressure是从spark 1.5以后引入的,在之前呢,只能通过限制最大消费速度(这个要人为压测预估),对于基于Receiver 形式,我们可以通过配置 spark.streaming.receiver.maxRate 参数来限制每个 receiver 每秒最大可以接收的记录的数据;对于 Direct Approach 的数据接收,我们可以通过配置 spark.streaming.kafka.maxRatePerPartition 参数来限制每次作业中每个 Kafka 分区最多读取的记录条数。

这种限速的弊端很明显,比如假如我们后端处理能力超过了这个最大的限制,会导致资源浪费。需要对每个spark Streaming任务进行压测预估。成本比较高。由此,从1.5开始引入了back pressure,这种机制呢实际上是基于自动控制理论的pid这个概念。我们就简单讲一下其中思路:为了实现自动调节数据的传输速率,在原有的架构上新增了一个名为 RateController 的组件,这个组件继承自 StreamingListener,其监听所有作业的 onBatchCompleted 事件,并且基于 processingDelay 、schedulingDelay 、当前 Batch 处理的记录条数以及处理完成事件来估算出一个速率;这个速率主要用于更新流每秒能够处理的最大记录的条数。这样就可以实现处理能力好的话就会有一个较大的最大值,处理能力下降了就会生成一个较小的最大值。来保证Spark Streaming流畅运行。

pid速率计算源码

flink和spark Streaming中Back Pressure的示例分析

配置Spark Streaming的back pressure

spark.streaming.backpressure.initialRate: 启用反压机制时每个接收器接收第一批数据的初始最大速率。默认值没有设置。

spark.streaming.backpressure.rateEstimator:速率估算器类,默认值为 pid ,目前 Spark 只支持这个,大家可以根据自己的需要实现。

spark.streaming.backpressure.pid.proportional:用于响应错误的权重(最后批次和当前批次之间的更改)。默认值为1,只能设置成非负值。weight for response to "error" (change between last batch and this batch)

spark.streaming.backpressure.pid.integral:错误积累的响应权重,具有抑制作用(有效阻尼)。默认值为 0.2 ,只能设置成非负值。weight for the response to the accumulation of error. This has a dampening effect.

spark.streaming.backpressure.pid.derived:对错误趋势的响应权重。 这可能会引起 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.minRate:可以估算的最低费率是多少。默认值为 100,只能设置成非负值。

更多Spark教程,关注浪尖公众号:Spark学习技巧

Flink的BackPressure

如果你看到一个task的back pressure告警(比如,high),这意味着生产数据比下游操作算子消费的速度快。Record的在你工作流的传输方向是向下游,比如从source到sink,而back pressure正好是沿着反方向,往上游传播。

举个简单的例子,一个工作流,只有source到sink两个步骤。假如你看到source端有个告警,这意味着sink消费数据速率慢于生产者的生产数据速率。Sink正在向上游进行back pressure。

采样线程

Back Pressure(后面翻译成背压)是通过重复采样正在运行的tasks的tack trace样本数据来监控任务的。JobManager会针对你的job的tasks重复触发调用Thread.getStackTrace()。

flink和spark Streaming中Back Pressure的示例分析

如果样本数据显示任务线程卡在某个内部方法调用中(从网络堆栈请求缓冲区),则表示该任务存在背压。

默认情况,为了判断是否进行背压,jobmanager会每50ms触发100次stack traces。WEB界面中显示的比率,告诉你在这些stack traces中,阻塞在内部方法调用的stack traces占所有的百分比,例如,0.01,代表着100次中有一次阻塞在内部调用。

• OK: 0 <= Ratio <= 0.10

• LOW: 0.10 < Ratio <= 0.5

• HIGH: 0.5 < Ratio <= 1

为例避免stack trace采样导致task managers压力过大,web 界面仅仅在60s刷新一次。

配置

可以通过下面的属性进行配置

1, jobmanager.web.backpressure.refresh-interval:在这个时间之后,统计数据将会废弃,需要重新刷新。默认是60000,也即是1min。

2, jobmanager.web.backpressure.num-samples:判断背压需要进行stack trace采样的个数,默认是100

3, jobmanager.web.backpressure.delay-between-samples:两次stack trace个采用间隔。

栗子

在flink的webui 的job界面中可以看到背压。

正在进行的采样

这意味着JobManager对正在运行的tasks触发stack trace采样。默认配置,这将会花费五秒钟完成。

点击之后,就触发了该操作算子所有task的采样。

flink和spark Streaming中Back Pressure的示例分析

背压状态

如果您看到任务的状态ok,则表示没有背压指示。另一方面,HIGH意味着任务被加压。

flink和spark Streaming中Back Pressure的示例分析

flink和spark Streaming中Back Pressure的示例分析

对比

Spark Streaming的背压比较简单,主要是根据后端task的执行情况,调度时间等,来使用pid控制器计算一个最大offset,进而来调整Spark Streaming从kafka拉去数据的速度。

Flink的背压就不仅限于从kafka拉去数据这块,而且背压方式不相同,他是通过一定时间内stack traces采样,阻塞的比率来确定背压的。

关于“flink和spark Streaming中Back Pressure的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: flink和spark Streaming中Back Pressure的示例分析

本文链接: https://www.lsjlt.com/news/295722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • flink和spark Streaming中Back Pressure的示例分析
    这篇文章将为大家详细讲解有关flink和spark Streaming中Back Pressure的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spark Streaming的back pres...
    99+
    2023-06-19
  • Spark Streaming+Spark SQL的数据倾斜示例分析
    这篇文章将为大家详细讲解有关Spark Streaming+Spark SQL的数据倾斜示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.现象 三台机器都有产生executor,每台...
    99+
    2023-06-03
  • Spark-Sql的示例分析
    这篇文章主要介绍Spark-Sql的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SparkSQL运行架构Spark SQL对SQL语句的处理,首先会将SQL语句进行解析(Parse),然后形成一个Tree,...
    99+
    2023-06-21
  • Apache Hudi结合Flink的示例分析
    这篇文章主要介绍Apache Hudi结合Flink的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 实时数据落地需求演进实时平台上线后,主要需求是开发实时报表,即抽取各类数据源做实时etl后,...
    99+
    2023-06-29
  • Flink on yarn运行原理的示例分析
    小编给大家分享一下Flink on yarn运行原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Flink运行时由两种类型的进程组成:1),JobManager也叫master协调分布式执行。他们调度任务,协调...
    99+
    2023-06-19
  • macOS Spark 2.4.3 standalone 搭建的示例分析
    本篇文章给大家分享的是有关macOS Spark 2.4.3 standalone 搭建的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。based onjdk 1.8M...
    99+
    2023-06-02
  • 基于Spark Mllib文本分类的示例分析
    这篇文章将为大家详细讲解有关基于Spark Mllib文本分类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基于Spark Mllib的文本分类文本分类是一个典型的机器学习问题,其主要目标是通过...
    99+
    2023-06-19
  • Javascript中 “&” 和 “|” 的示例分析
    这篇文章主要为大家展示了“Javascript中 “&” 和 “|” 的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript中 “...
    99+
    2024-04-02
  • Redis中RDB和AOF的示例分析
    这篇文章将为大家详细讲解有关Redis中RDB和AOF的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 有两种持久化方案,RDB (Redis Data...
    99+
    2024-04-02
  • html5中drag和drop的示例分析
    小编给大家分享一下html5中drag和drop的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义和用法在拖放的过程中...
    99+
    2024-04-02
  • shell中if和else的示例分析
    这篇文章主要为大家展示了“shell中if和else的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“shell中if和else的示例分析”这篇文章吧。基本语法shell的if语法和C语言...
    99+
    2023-06-09
  • Go中Waitgroup和锁的示例分析
    这篇文章给大家分享的是有关Go中Waitgroup和锁的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。学 Go 的时候知道 Go 语言支持并发,最简单的方法是通过 go 关键字开启 goroutine 即...
    99+
    2023-06-15
  • spring中IoC和DI的示例分析
    这篇文章主要介绍spring中IoC和DI的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!这里先来简单介绍下IoC和DI的区别:IOC:翻译过来是控制反转,将对象的创建权由Spring管理,HelloServ...
    99+
    2023-05-30
    spring ioc di
  • angular2中@input和@output的示例分析
    这篇文章将为大家详细讲解有关angular2中@input和@output的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。angular2 @input和@out...
    99+
    2024-04-02
  • webpack中loader和plugin的示例分析
    这篇文章主要介绍webpack中loader和plugin的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 基础回顾首先我们先回顾一下webpack常见配置,因为后面会用到...
    99+
    2024-04-02
  • MySQL中DDL和DML的示例分析
    这篇文章将为大家详细讲解有关MySQL中DDL和DML的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、DDL        可能有看官老爷会问,什么是D...
    99+
    2023-06-22
  • Spring中IOC和AOP的示例分析
    小编给大家分享一下Spring中IOC和AOP的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring是一个开源框架,主要实现两件事,IOC(控制反转...
    99+
    2023-05-30
    spring ioc aop
  • Mysql中varchar和text的示例分析
    小编给大家分享一下Mysql中varchar和text的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Varchar 对...
    99+
    2024-04-02
  • web中let和const的示例分析
    这篇文章将为大家详细讲解有关web中let和const的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。块级作用域在ES6之前我们脑海里应该只存在全局作用域和函数级...
    99+
    2024-04-02
  • Hive中DDL和DML的示例分析
    这篇文章主要为大家展示了“Hive中DDL和DML的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive中DDL和DML的示例分析”这篇文章吧。Hive构建在Hadoop之上:&nbs...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作