Spark Streaming 反压机制是1.5版本推出的特性,用来解决处理速度比摄入速度慢的情况,简单来讲就是做流量控制。当批处理时间(Batch Processing Time)大于批次间隔(Batch Interval,即BatchDuration)时,说明处理数据的速度小于数据摄入的速度,持续时间过⻓或源头数据暴增,容易造成 数据在内存中堆积,最终导致Executor OOM。反压就是来解决这个问题的。
spark streaming的消费数据源方式有两种:
1. 若是基于Receiver的数据源,可以通过设置spark.streaming.receiver.maxRate来控制最大输入 速率;
2. 若是基于Direct的数据源(如Kafka Direct Stream),则可以通过设置spark.streaming.kafka.maxRatePerPartition来控制最大输入速率。

当然,在事先经过压测,且流量高峰不会超过预期的情况下,设置这些参数一般没什么问题。但最大值不代表是最优值,最好还能根据每个批次处理情况来动态预估下个批次最优速率。

在Spark 1.5.0以上,就可通过背压机制来实现。开启反压机制,即设置spark.streaming.backpressure.enabled为true,Spark Streaming会自动根据处理能力来调整输入速率,从而在流量高峰时仍能保证最大的吞吐和性能

Spark Streaming的反压机制中,有以下几个重要的组件:

第一:RateController
RateController 组件是 JobScheduler 的监听器,主要监听集群所有作业的提交、运行、完成情况,并从 BatchInfo 实例中获取以下信息,交给速率估算器(RateEstimator)做速率的估算。

  • 当前批次任务处理完成的时间戳 (processingEndTime)
  • 该批次从第一个 job 到最后一个 job 的实际处理时⻓ (processingDelay)
  • 该批次的调度时延,即从被提交到 JobScheduler 到第一个 job 开始处理的时⻓
    (schedulingDelay)
  • 该批次输入数据的总条数(numRecords)

第二:RateEstimator
Spark 2.x 只支持基于 PID 的速率估算器,这里只讨论这种实现。基于 PID 的速率估算器简单地说就是它把收集到的数据(当前批次速率)和一个设定值(上一批次速率)进行比较,然后用它们 之间的差计算新的输入值,估算出一个合适的用于下一批次的流量阈值。这里估算出来的值就是流 量的阈值,用于更新每秒能够处理的最大记录数

第三:RateLimiter

RateController和RateEstimator组件都是在Driver端用于更新最大速度的,而RateLimiter是用于接收到Driver的更新通知之后更新Executor的最大处理速率的组件。RateLimiter是一个抽象类,它并不是Spark本身实现 的,而是借助了第三方Google的GuavaRateLimiter来产生的。它实质上是一个限流器,也可以叫 做令牌,如果Executor中task每秒计算的速度大于该值则阻塞,如果小于该值则通过,将流数据加 入缓存中进行计算。

*反压机制真正起作用时需要至少处理一个批:由于反压机制需要根据当前批的速率,预估新批的速率,所以反压机制真正起作用前,应至少保证处理一个批。*如何保证反压机制真正起作用前应用不会崩溃:要保证反压机制真正起作用前应用不会崩溃,需要控制每个批次最大摄入速率。若为Direct Stream,如Kafka Direct Stream,则可以通过spark.streaming.kafka.maxRatePerPartition参数来控制。此参数代表了每秒每个分区最大摄入的数据条数。假设BatchDuration为10秒,spark.streaming.kafka.maxRatePerPartition为12条,kafka topic分区数为3个,则一个批(Batch)最大读取的数据条数为360条(3*12*10=360)。同时,需要注意,该参数也代表了整个应用生命周期中的最大速率,即使是背压调整的最大值也不会超过该参数。

反压相关的参数

sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制相关推荐

  1. sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

    Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...

  2. sparkstreaming监听hdfs目录如何终止_四十六、Spark Streaming简介及入门

    1.什么是Spark Streaming Spark Streaming是基于Spark Core之间的实时计算框架,可以从很多数据源消费数据并对数据进行处理.它是Spark核心API的一个扩展与封装 ...

  3. sparkstreaming监听hdfs目录如何终止_HDFS—HA高可用详解

    一.HA概述 1)所谓HA(high available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA 机制:HDFS的HA和Y ...

  4. sparkstreaming监听hdfs目录_Spark Streaming消费Kafka数据的两种方案

    下午的时候翻微信看到大家在讨论Spark消费Kafka的方式,官网中就有答案,只不过是英文的,当然很多博客也都做了介绍,正好我的收藏夹中有一篇文章供大家参考.文章写的通俗易懂,搭配代码,供大家参考. ...

  5. sparkstreaming监听hdfs目录_flume kafka和sparkstreaming整合

    本文介绍Flume.Kafka和Sparkstreaming的整合.代码流程是,我们通过shell脚本重播测试轨迹数据到指定轨迹文件中,使用Flume监听该轨迹数据文件,实时将轨迹数据发送到Kafka ...

  6. touch拦截监听_Android - requestDisallowInterceptTouchEvent() 阻止父层的View截获touch事件(事件处理机制)...

    研究这个方法之前,首先让我们回顾一下View的onTouchEvent()以及onInterceptTouchEvent()的详细解释 (1)onTouchEvent() 当手指触摸到屏幕时,系统就会 ...

  7. oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):

    数据库监听日志状态及目录:查看监听(使用grid用户登陆): su - grid 密码:grid [grid@db1 ~]$ lsnrctl LSNRCTL> status LSNRCTL> ...

  8. inotifywait监听php,利用inotifywait监控主机文件和目录

    inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能.查看内核版本 [root@Oracle ~]# uname -r 2.6.32-220 ...

  9. java 持久监听blockqueue的变化_Curator目录监听

    Curator目录监听 write by donaldhan, 2018-06-29 09:40 引言 上一篇文章,我们简单看一下Curator的CDRWA相关的构造器,及Curator框架实现,[C ...

最新文章

  1. element-ui 2.4.3 如何实现对form部分字段验证的解决方法?
  2. 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
  3. c++中的new、operator new、placement new
  4. VB6.0连接MySQL数据库
  5. csrf spring_无状态Spring安全性第1部分:无状态CSRF保护
  6. iOS判断为空或者只为空格
  7. 干货!一文搞懂无状态服务
  8. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
  9. [转载] 机器学习模型的保存和调用
  10. 如何在没有域的环境中搭建AlwaysOn(一)
  11. date日期格式化 java,Java日期格式化常用方法
  12. 顺丰标准 150标准丰密面单 Clodop 实现打印
  13. python圣经是哪本_我的圣经:17年前的那本《Python 2.1 宝典》
  14. java设计模式-终结者者模式
  15. aspeed显卡安装ubuntu驱动
  16. JAVA打印指定长度的随机英文字母(小写)
  17. (winform)PDF文档或视频文件在线阅读或观看工具
  18. 高新技术企业申请流程如何
  19. 使用NVivo研究时,不得不注意的几点!
  20. 宽带不能上传发文件_光纤宽带和普通宽带的区别

热门文章

  1. pytorch 笔记:DataLoader 扩展:构造图片DataLoader
  2. tableau可视化数据分析60讲(十四)-tableau可视化视图(交叉表项目符号图)
  3. tableau必知必会之教你做品牌树的树梢(分类桑基图补丁)
  4. 从无到有算法养成篇-栈和队列·栈
  5. Top K算法问题的实现
  6. QT窗体控件自适应大小
  7. 基于面板数据的熵值法
  8. 【git学习五】git基础之git分支
  9. c#如何实现在两个窗体(Form)间传输数据或变量
  10. Linux原始套接字实现分析---转