構造化ストリーミングの概念
Apache Spark 構造化ストリーミングを使用すると、バッチ処理で使用するのと同じ Spark API でストリーミングアプリケーションとパイプラインを構築できます。Databricksでは、次の2つの処理モードをサポートしています。
- リアルタイム モード (RTM) : 不正行為の検出や賭博のパーソナライゼーションなど、サブ秒の運用ワークロード用に設計されています。RTMは、レコードが到着したときに処理を行い、エンドツーエンドの遅延は5ミリ秒に抑えられます。リアルタイムモードの概念を参照してください。
- マイクロバッチモード :分析パイプラインおよび抽出、変換、読み込み(ETL)ワークロード向けに設計されています。マイクロバッチモードはストリームを小さなバッチで処理し、コンピュートコストと秒または分単位で測定されるレイテンシー要件のバランスを取ります。マイクロバッチ処理がdefaultモードです。
両方のモードで同じ Structured Streaming APIs が使用されます。両方のモードでサポートされるクエリーについては、Triggerとコンピュートの構成でモードを切り替えることができます。リアルタイムモードの設定を参照してください。
Apache Spark™ Declarative Pipelines 上に構築されたLakeFlow Pipelinesでも、Structured Streaming がストリーミングを支えています。パイプラインはオーケストレーション、チェックポイント、復旧を管理し、SQLまたはPythonで変換を定義します。
手順を追ったチュートリアルについては、 「最初の構造化ストリーミングワークロードを実行する」を参照してください。
データストリームからの読み取り
構造化ストリーミングを使用して、サポートされているデータソースからデータを段階的に取り込みます。
-
- Auto Loader
- クラウドストレージに新しいデータファイルが到着するたびに、段階的かつ効率的に処理します。
-
- Delta Lake テーブルのストリーミングの読み取りと書き込み
- Delta Lakeテーブルを、厳密に1回だけ処理されることを保証するストリーミングソースおよびシンクとして使用します。
-
- SQL および Spark API
- SQL および Spark API を使用して、メッセージバス、キュー、エンタープライズアプリケーションに接続します。
-
- マイクロバッチサイズ
- バッチサイズを一定に保ち、処理の遅延を防ぐために、入力速度を制限する。
データ シンクへの書き込み
構造化ストリーミングがターゲットシステムにデータを配信する方法を設定します。
-
- チェックポイント
- 処理状態を保存することで、耐障害性と厳密に1回限りの配信セマンティクスを実現します。
-
- 出力モード
- ステートフルなストリーミングクエリでは、追加、更新、完了の各モードから選択できます。
-
- トリガー間隔
- 処理要件に合わせて、遅延時間とコストのバランスを取るようにトリガー間隔を設定してください。
-
- 構造化ストリーミングのリアルタイムモード
- エンドツーエンドのレイテンシを最短5ミリ秒に抑え、リアルタイムワークロードのデータを処理します。
ステートフル処理とステートレス処理
ステートレスクエリは、状態を保持せずに行を処理します。ステートフルクエリは、集計、結合、重複排除のための中間状態を保持します。
-
- ステートレスストリーミングクエリ
- 中間状態を保持せずにデータを処理するクエリを最適化する。
-
- ウォーターマーク
- ステートフルな操作において、構造化ストリーミングが遅延したデータを待機する時間を制御します。
-
- ステートフルストリーミング
- ステートフル オペレーターを使用して、集約、ストリーム ストリーム結合、重複排除を管理します。
監視および管理
クエリのパフォーマンスを追跡し、最適化を適用し、本番運用構造化ストリーミング ワークロードのデータ アクセスを管理します。
-
- StreamingQueryListener で監視する
- Spark UIとリスナーAPIを使用して、クエリの進行状況とパフォーマンスのメトリクスを追跡します。
-
- Unity Catalogで管理する
- ガバナンスとアクセス制御を備えたストリーミング ワークロード用にUnity Catalog構成します。