Structured Streaming プログラミングガイド
概要
Structured Streaming は、Spark SQL エンジン上に構築された、スケーラブルで耐障害性の高いストリーム処理エンジンです。静的データに対するバッチ処理と同様の方法で、ストリーミング計算を表現できます。Spark SQL エンジンが、その計算を増分かつ継続的に実行し、ストリーミングデータが到着し続けるにつれて最終結果を更新します。Scala、Java、Python、または R の Dataset/DataFrame API を使用して、ストリーミング集計、イベントタイムウィンドウ、ストリーム対バッチ結合などを表現できます。計算は、最適化された同じ Spark SQL エンジン上で実行されます。最後に、システムはチェックポインティングと書き込み先頭ログを通じて、エンドツーエンドの正確に一度だけの耐障害性保証を確保します。要するに、Structured Streaming は、ユーザーがストリーミングについて考慮する必要なく、高速でスケーラブル、耐障害性があり、エンドツーエンドで正確に一度だけのストリーム処理を提供します。
内部的には、デフォルトで Structured Streaming クエリはマイクロバッチ処理エンジンを使用して処理されます。これは、データストリームを小さなバッチジョブのシリーズとして処理することで、100ミリ秒という低レイテンシと正確に一度だけの耐障害性保証を実現します。しかし、Spark 2.3 以降では、Continuous Processing と呼ばれる新しい低レイテンシ処理モードを導入しました。これは、少なくとも一度だけの保証で、1ミリ秒という低レイテンシを実現できます。クエリの Dataset/DataFrame 操作を変更することなく、アプリケーションの要件に基づいてモードを選択できます。
このガイドでは、プログラミングモデルと API を段階的に説明します。主にデフォルトのマイクロバッチ処理モデルを使用して概念を説明し、その後、後ほど Continuous Processing モデルについて説明します。まず、Structured Streaming クエリの簡単な例、すなわちストリーミング単語カウントから始めましょう。