【Spark】Spark Streaming的back pressure
1.美图
在讲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 1.5之前,流应用程序如果因为资源不足导致处理数据的速度跟不上接收数据的速度的情况,可以通过设置每秒所接收数据的最大条数来缓解这种情况。对于使用Receiver的方式可以通过设置’spark.streaming.receiver.maxRate’参数;对于使用Direct的方式设置参数’spark.streaming.kafka.maxRatePerPartition’。
这种限速的弊端很明显,比如假如我们后端处理能力超过了这个最大的限制,会导致资源浪费。需要对每个spark Streaming任务进行压测预估。成本比较高。
由此,Spark在1.5版本中引入了背压功能,就不再需要设置上述的速率限制了,Spark Streaming会随着处理条件的变化,自动计算所需要的速率,并进行动态地调整,但前提条件是要通过设置参数’spark.streaming.backpressure.enabled’=true来启用这个功能,因为这个功能在默认情况下是未启用的。
这种机制呢实际上是基于自动控制理论的pid这个概念。我们就简单讲一下其中思路:为了实现自动调节数据的传输速率,在原有的架构上新增了一个名为 RateController 的组件,这个组件继承自 StreamingListener,其监听所有作业的 onBatchCompleted 事件,并且基于 processingDelay 、schedulingDelay 、当前 Batch 处理的记录条数以及处理完成事件来估算出一个速率;这个速率主要用于更新流每秒能够处理的最大记录的条数。这样就可以实现处理能力好的话就会有一个较大的最大值,处理能力下降了就会生成一个较小的最大值。来保证Spark Streaming流畅运行。
pid速率计算源码
配置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
参考:flink和spark Streaming中的Back Pressure
【Spark】Spark Streaming的back pressure相关推荐
- Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...
从CSDN中读取到关于spark structured streaming源代码分析不错的几篇文章 spark源码分析--事件总线LiveListenerBus spark事件总线的核心是LiveLi ...
- 测试hudi-0.7.0对接spark structure streaming
测试hudi-0.7.0对接spark structure streaming 测试环境 Hudi version :0.7.0 Spark version :2.4.0 Hive version : ...
- kafka spark Structured streaming整合后集群报错KafkaConsumer.subscribe(Ljava/util/Collection;)V
简介 整个项目架构是在CDH中,,然后spark Structured streaming消费kafka. spark 2.3版本 kafka0.10版本 <!-- spark sql kafk ...
- 【Spark Streaming】(四)基于 Spark Structured Streaming 的开发与数据处理
文章目录 一.前言 二.Spark Streaming vs Structured Streaming 2.1 Spark Streaming 2.2 Structured Streaming 2.3 ...
- Spark Structured Streaming 解析 JSON
文章目录 json1 代码 写数据库 json2 Schema 代码(反序列化 value 中的字节数组, 得到原始 JSON) json3 代码 json1 {"metadata" ...
- [Spark]Spark Streaming 指南四 输入DStreams和Receivers
1. 输入DStream与Receiver 输入DStreams表示从源中获取输入数据流的DStreams.在指南一示例中,lines表示输入DStream,它代表从netcat服务器获取的数据流.每 ...
- 大数据Spark Structured Streaming
目录 1 Spark Streaming 不足 2 Structured Streaming 概述 2.1 模块介绍 2.3 编程模型 3 入门案例:WordCount 3.1 功能演示 3.2 So ...
- 大数据之Spark:Structured Streaming
目录 1. API 2. 核心思想 3. 应用场景 4.Structured Streaming 实战 1) 读取 Socket 数据 2) 读取目录下文本数据 3) 计算操作 4) 输出 在 2.0 ...
- Spark Structured Streaming概述
Spark Structured Streaming概述 结构化流(Structured Streaming)是基于Spark SQL引擎的流处理引擎,它具有可扩展和容错性.可以使用类似批数据处理的表 ...
最新文章
- 自学python能干些什么副业好-python可以作为副业赚钱嘛?
- Hyperledger Fabric 智能合约实战 (0) 整体步骤
- UML建模的要点总结
- 刚刚出炉的Asp.net网站部署视频教程
- 阿里云TSDB在大数据集群监控中的方案与实战
- Linux运维学习大纲
- playframework 打包在tomcat里部署
- 上汽集团:R汽车改名飞凡汽车
- 转帖-win2003各版本的区别
- ExtJs异步ajax调用和同步ajax调用公用方法(转)
- ua获取手机型号_如何根据 UA 判断手机型号和厂家?
- 关于ISO27001信息安全管理体系的内容详细概括
- 网上找的视频素材有水印怎么办?教你一键打码
- ansys模型导入matlab,CAD三维模型导入ANSYS的万能方法
- 关于ie浏览器不能访问localhost的问题
- Report Services RDL报告服务器的一些经验
- 前端单元测试到底要怎么写?看这一篇就够了
- java 天猫项目_2018最新Java前后端练手项目【模仿天猫前端】
- 【转载】TCP/IP协议详解
- ICCV 2021 | 美团“LargeFineFoodAI“研讨会开幕在即,互动有奖