Kafka Consumer for Spark Streaming)によって返されるバッチのサイズを制限することは可能ですか?
最初に取得するバッチには数億のレコードがあり、それらを処理してチェックポイントを作成するには時間がかかるので、私は尋ねています。
あなたの問題は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のブログ 。
上記の回答とは別に。バッチサイズは3つのパラメーターの積です
batchDuration
:ストリーミングデータがバッチに分割される時間間隔(秒単位)。spark.streaming.kafka.maxRatePerPartition
:1秒あたりのパーティションごとのメッセージの最大数を設定します。これをbatchDuration
と組み合わせると、バッチサイズが制御されます。 maxRatePerPartition
を設定し、大きく(そうしないと、効果的にジョブを抑制します)、batchDuration
を非常に小さくします。バックプレッシャの有効化/無効化時にこの製品がどのように機能するかを詳しく説明するために( set spark.streaming.kafka.maxRatePerPartition for createDirectStream )
最大バッチサイズを制限すると、処理時間の制御に大きく役立ちますが、メッセージの処理待機時間が長くなります。
プロパティの下の設定により、バッチサイズを制御できます。spark.streaming.receiver.maxRate= spark.streaming.kafka.maxRatePerPartition =
バックプレッシャを有効にすることで、処理時間に基づいてバッチサイズを動的に設定することもできます。spark.streaming.backpressure.enabled:true spark.streaming.backpressure.initialRate: