zoukankan      html  css  js  c++  java
  • Spark Steaming消费kafka数据条数变少问题

    对于基于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流畅运行。

    配置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,只能设置成非负值。

    ref: https://cloud.tencent.com/developer/article/1172867

  • 相关阅读:
    java 排序
    spring 收藏博文
    转载:一位软件工程师的6年总结
    网站
    jdk配置环境变量的方法
    推荐桌游
    js 猜数字游戏
    html简易计算器的前端代码
    (转载)float与double中的精度问题
    jiaxiang
  • 原文地址:https://www.cnblogs.com/chenzechao/p/10996161.html
Copyright © 2011-2022 走看看