web-dev-qa-db-ja.com

制限Kafka使用時のバッチサイズSparkストリーミング

Kafka Consumer for Spark Streaming)によって返されるバッチのサイズを制限することは可能ですか?

最初に取得するバッチには数億のレコードがあり、それらを処理してチェックポイントを作成するには時間がかかるので、私は尋ねています。

15
Samy Dindane

あなたの問題はSpark Streaming Backpressureで解決できると思います。

小切手 spark.streaming.backpressure.enabledおよびspark.streaming.backpressure.initialRate

デフォルトではspark.streaming.backpressure.initialRate設定されていませんおよびspark.streaming.backpressure.enabledはデフォルトでdisabledなので、sparkはできる限り多く取ると思います。

Apache Spark Kafka configuration から

spark.streaming.backpressure.enabled

これにより、Spark Streamingが現在のバッチスケジューリングの遅延と処理時間に基づいて受信速度を制御できるようになり、システムが処理できる速度でのみシステムが受信するようになります。内部的に、これにより動的に最大値が設定されます受信者の受信レート。このレートは、値spark.streaming.receiver.maxRateおよびspark.streaming.kafka.maxRatePerPartitionそれらが設定されている場合(以下を参照)。

そして、あなたは最初のバッチを制御したい、またはもっと具体的にしたいので-最初のバッチのメッセージの数、あなたはspark.streaming.backpressure.initialRate

spark.streaming.backpressure.initialRate

これは、バックプレッシャメカニズムが有効になっているときに各レシーバが最初のバッチのデータを受信する初期の最大受信レートです。

これは、Sparkジョブ(それぞれSparkワーカー全員))がkafkaからの10000通のメッセージを処理できる場合に適していますが、kafkaブローカーはあなたの仕事に100000メッセージを与えます。

多分あなたもチェックすることに興味があるでしょうspark.streaming.kafka.maxRatePerPartitionそして、実際の例でのこれらのプロパティに関するいくつかの調査と提案 Jeroen van Wilgenburgのブログ

25
VladoDemcak

上記の回答とは別に。バッチサイズは3つのパラメーターの積です

  1. batchDuration:ストリーミングデータがバッチに分割される時間間隔(秒単位)。
  2. spark.streaming.kafka.maxRatePerPartition:1秒あたりのパーティションごとのメッセージの最大数を設定します。これをbatchDurationと組み合わせると、バッチサイズが制御されます。 maxRatePerPartitionを設定し、大きく(そうしないと、効果的にジョブを抑制します)、batchDurationを非常に小さくします。
  3. kafkaトピックのパーティション数

バックプレッシャの有効化/無効化時にこの製品がどのように機能するかを詳しく説明するために( set spark.streaming.kafka.maxRatePerPartition for createDirectStream

6
Vikki

最大バッチサイズを制限すると、処理時間の制御に大きく役立ちますが、メッセージの処理待機時間が長くなります。

プロパティの下の設定により、バッチサイズを制御できます。spark.streaming.receiver.maxRate= spark.streaming.kafka.maxRatePerPartition =

バックプレッシャを有効にすることで、処理時間に基づいてバッチサイズを動的に設定することもできます。spark.streaming.backpressure.enabled:true spark.streaming.backpressure.initialRate:

0
Jignesh