2017-02-07 9 views
2

YARNクラスターではSpark Streaming applicationが実行されています。スパークストリーミング - バッチインターバルvs処理時間

Kafka topicsからメッセージを受信して​​います。

実際、処理時間はバッチ間隔を超えています。

Batch Interval : 1 Minute 
Processing Time : 5 Minutes 

私が知りたいのですが、一部のデータが処理時間の間に受信された場合に何が起こるか、処理超えるまでメモリ内のデータが利用可能になります。または、後続のデータフェッチでオーバーライドされますか?

私たちはDirect Streaming approachを使用して、カフカのトピックからデータを取得しています。

私はWindow based操作と一緒に行かなければなりませんか?例えば私がWindow length as 5 Minutes and Sliding interval as 2 Minutes and Batch Interval as 1 Minuteを持っているなら、それは働くでしょうか?アプリケーションではデータを失うことができないためです。

答えて

4

直接ストリーミングアプローチでは、データは受信者によって読み取られず、他のワーカーにディスパッチされます。ドライバがKafkaからオフセットを読み込んだ後に、読み取るオフセットのサブセットを含む各パーティションを送信します。

従業員が前のジョブの処理を完了していない場合、明示的にspark.streaming.concurrentJobsを1以上に設定しない限り、次のジョブの処理を開始しません。つまり、オフセットは読み込まれますが、実際にデータを読み込むエグゼキュータには送信されません。そのため、データが失われることはありません。

これは、あなたの仕事が無限に遅くなり、大量の処理が遅れることになります。これはあなたが望むものではありません。経験則として、スパークジョブの処理時間はそのジョブに設定された間隔よりも短くなければなりません。

+1

タイムリーかつ偉大な答えをありがとう。 – Shankar

関連する問題