2016-07-02 20 views
2

スパークストリーミング時間間隔を5秒に設定しました。現在の5秒間に非常に多くのデータが受信され、スパークストリーミングが5秒で終了しない場合は、データの次のバッチが送信されます。スパークストリーミングでは、前のバッチデータの処理が完了してから、次のバッチデータを処理できますか?

スパークストリーミングは、次のデータバッチを同時に処理しますか?

バッチは並行して実行されますか?

答えて

4

スパークストリーミングは、一度に1つのバッチを処理します。さらに、各バッチ内の個々のデータ項目は、バッチ内でその順序で処理されます。デフォルトでは、次のデータ項目が来るときにバケット内のすべてのデータ項目に到達するのに十分な時間がsparkにない場合、それらのデータ項目は削除されます。

ただし、Kafkaなどのストリームへのより高度な接続を使用すると、sparkは現在の処理が完了すると保留中のバッチを処理できます。これにより、カフカにはバッチが築かれ、このビルドアップは「バックプレッシャー」と呼ばれ、カフカがデータの廃棄を開始しなければならない時点まで構築することもできます。

カフカなどの高度な接続を使用しておらず、データストリームが "バースト的"(入力レートが高い場合)の場合、データ損失を最小限に抑えるためにバッチ時間を増やすことをお勧めします。

2

スパークストリーミングは時間ベースのパイプラインです。先ず最初に来ました。したがって、バッチを処理する最善の方法で各バッチを処理するので、隣接するバッチを一緒に処理することはありません。より良いケースは、現在の処理が終了すると保留中のバッチを処理することです。これは背圧と呼ばれ、カフカなどの特定の受信機を使用して動作します。そうでない場合、このデータは単に失われます。

+0

*「そうでないとこのデータが失われます」*、私はこの文については本当に明確ではありません。スパークストリーミングで現在のバッチデータと次のバッチを処理するのに十分な時間がない場合、次のバッチデータが捨てられる可能性があります。 – Guo

+0

はい。これは正しいです –

関連する問題