スパークストリーミング背圧機構クエスト

1.背圧原則メカニズム

スパークストリーミング背圧機構はスパーク1.5.0新しい機能を動的に取り込み効率の速度に応じて調整することができる導入されます。

バッチ時間(バッチ処理時間)は間隔のバッチ(バッチ間隔、すなわちBatchDuration)よりも大きい場合、それはデータ処理速度は、取り込みのデータレートよりも小さいことを示し、期間が長すぎるか、爆発のソースデータは、メモリ内のデータが原因の可能性があります最終的に執行OOMまたはタスクベンの崩壊をリードし、蓄積します。

この場合には、カフカ受信に基づいて、データ・ソース場合は、最大入力レートspark.streaming.receiver.maxRateを設定することによって制御することができる(例えばカフカ直接ストリームとして)直接ベースのデータソースの場合、spark.streamingによって提供されています最大入力速度を制御する.kafka.maxRatePerPartition。もちろん、圧力及び流量を測定することにより、事前の場合には、一般に、これらのパラメータを設定するための何の問題も予想されるピークを超えないだろう。ただし、最大値は、好ましくは、動的各バッチ処理バッチに応じて最適な速度を推定し、最適値を表していてもよいです。上記スパーク1.5.0においては、背圧機構を介して達成することができます。トラフィックピークが依然として最大のスループットと性能を確保することができるときにtrueに設定spark.streaming.backpressure.enabledオープン背圧機構は、スパークストリーミングは自動的に、処理能力に応じて入力速度を調整します。

override def onBatchCompleted(batchCompleted: StreamingListenerBatchCompleted) {
    val elements = batchCompleted.batchInfo.streamIdToInputInfo

    for {
      // 处理结束时间
      processingEnd <- batchCompleted.batchInfo.processingEndTime
      // 处理时间,即`processingEndTime` - `processingStartTime`
      workDelay <- batchCompleted.batchInfo.processingDelay
      // 在调度队列中的等待时间,即`processingStartTime` - `submissionTime`
      waitDelay <- batchCompleted.batchInfo.schedulingDelay
      // 当前批次处理的记录数
      elems <- elements.get(streamUID).map(_.numRecords)
    } computeAndPublish(processingEnd, elems, workDelay, waitDelay)
  }

それは見ることができ、そしてそれらはその呼び出しcomputeAndPublish、次のように、この方法を:

private def computeAndPublish(time: Long, elems: Long, workDelay: Long, waitDelay: Long): Unit =
    Future[Unit] {
      // 根据处理时间、调度时间、当前Batch记录数,预估新速率
      val newRate = rateEstimator.compute(time, elems, workDelay, waitDelay)
      newRate.foreach { s =>
      // 设置新速率
        rateLimit.set(s.toLong)
      // 发布新速率
        publish(getLatestRate())
      }
    }

ことをより深く、特定の呼び出しrateEstimator.computeは次のような方法は、新しいレートを推定します:

def compute(
      time: Long,
      elements: Long,
      processingDelay: Long,
      schedulingDelay: Long): Option[Double]

2.背圧機構に関連するパラメータ

  • spark.streaming.backpressure.enabled
    背圧機構が有効になっている場合、偽のデフォルト値を。

  • spark.streaming.backpressure.initialRate
    デフォルトなし初期最大受信レート。受信機のみのストリームに適用され、ダイレクト・ストリームには適用されません。Integer型の、直接のプログラムが大きなバックログを持っているキューをコールドスタートするので、すべての最初の読み取りを最初のバッチを防ぐ必要があり、オープン、リミットデータ消費の場合には、すべての読み込みデフォルト、詰まらせるシステムを引き起こします

  • spark.streaming.kafka.maxRatePerPartition
    整数型の場合、デフォルトは直接パーティションカフカあたり毎秒読み取られたデータの最大量を制限し、各スレッドにすべて消費を読み出し

  • spark.streaming.stopGracefullyOnShutdown
    エレガントでキルタスクがデータの最後のバッチで行われ、その後、プログラムを閉じることができたときに、必須キルは、データ処理の中断原因起こらないことを保証するために閉じて、データの損失は処理されません
注意: 只有 3 激活的时候,每次消费的最大数据量,就是设置的数据量,如果不足这个数,就有多少读多少,如果超过这个数字,就读取这个数字的设置的值
只有 1+3 激活的时候,每次消费读取的数量最大会等于3设置的值,最小是spark根据系统负载自动推断的值,消费的数据量会在这两个范围之内变化根据系统情况,但第一次启动会有多少读多少数据。此后按 1+3 设置规则运行
1+2+3 同时激活的时候,跟上一个消费情况基本一样,但第一次消费会得到限制,因为我们设置第一次消费的频率了。
  • spark.streaming.backpressure.rateEstimatorの
    デフォルトのPID、レートコントローラは、このコントローラが唯一のスパークデフォルトをサポートし、カスタマイズすることができます。

  • spark.streaming.backpressure.pid.proportional
    1.0のデフォルト値は、唯一の非マイナス。レート制御信号寄与の合計重量の最後のバッチにレートとの間の現在の体重差。デフォルト値を使用することができます。

  • spark.streaming.backpressure.pid.integral
    デフォルト値0.2、非負のみ。総誤差重み制御信号に累積寄与率。デフォルト値を使用することができます。

  • spark.streaming.backpressure.pid.derived
    0.0のデフォルト値は、唯一の非マイナス。制御信号の総重量に対する重量比誤差分散の寄与。デフォルト値を使用することができます。

  • spark.streaming.backpressure.pid.minRate

    100のデフォルト値のみ正の数、最小レート。

背圧メカニズムの3.

//启用反压机制
conf.set("spark.streaming.backpressure.enabled","true")
//最小摄入条数控制
conf.set("spark.streaming.backpressure.pid.minRate","1")
//最大摄入条数控制
conf.set("spark.streaming.kafka.maxRatePerPartition","12")
//初始最大接收速率控制
conf.set("spark.streaming.backpressure.initialRate","10")    

バックプレッシャメカニズムが実際にクラッシュしないスパークアプリケーションの前に動作することを確認するには、各バッチの最大吸収速度を制御する必要があります。このようなダイレクト・ストリームカフカ例として直接ストリームは、パラメータはspark.streaming.kafka.maxRatePerPartitionによって制御することができます。このパラメータは、秒あたりの各パーティションの最大摂取量に関するデータの個数を表します。BatchDuration 10秒、spark.streaming.kafka.maxRatePerPartition 12で、トピックカフカパーティション3の数は、最大のための1つのバッチ(バッチ)が360を読み出すデータ数を(3仮定する12は 10 = 360)。同時に、パラメータはまた、最大背圧調整パラメータを超えない場合でも、アプリケーション全体のライフサイクルのための最大速度を表すことに留意されたいです。

おすすめ

転載: blog.51cto.com/14309075/2414995
おすすめ