メインコンテンツまでスキップ

構造化ストリーミングのトリガー間隔を構成する

Apache Spark 構造化ストリーミングはデータを増分的に処理します。バッチ処理のトリガー間隔を制御すると、リアルタイムに近い処理、5 分ごとまたは 1 時間ごとにデータベースを更新する、1 日または 1 週間のすべての新しいデータをバッチ処理するなどのワークロードに構造化ストリーミングを使用できます。

Databricks Auto Loader は構造化ストリーミングを使用してデータを読み込むため、トリガーのしくみを理解すると、必要な頻度でデータを取り込む際にコストを制御するための柔軟性が最大限に高まります。

時間ベースのトリガー間隔の指定

構造化ストリーミングでは、時間ベースのトリガー間隔を「固定間隔マイクロバッチ」と呼びます。 processingTime キーワードを使用して、期間を文字列として指定します (例: .trigger(processingTime='10 seconds'))。

指定した trigger 間隔が小さすぎる (数十秒未満) と、新しいデータが到着したかどうかを確認するために、システムが不要なチェックを実行する可能性があります。 レイテンシ要件とデータがソースに到着する速度のバランスを取るために、処理時間を構成します。

増分バッチ処理の構成

important

Databricks Runtime 11.3 LTS 以降では、 Trigger.Once 設定は非推奨です。 Databricks では、すべての増分バッチ処理ワークロードに Trigger.AvailableNow を使用することをお勧めします。

「available now」トリガー・オプションは、使用可能なすべてのレコードを増分バッチとして消費し、 maxBytesPerTrigger などのオプションを使用してバッチ・サイズを構成できます(サイジング・オプションはデータソースによって異なります)。

Databricks では、多くの構造化ストリーミング ソースからの増分バッチ処理に Trigger.AvailableNow を使用できます。 次の表に、各データソースに必要な最小サポート対象 Databricks Runtime バージョンを示します。

ソース

Databricks Runtime の最小バージョン

ファイルソース (JSON、Parquet など)

9.1 LTS

Delta Lake

10.4 LTS

Auto Loader

10.4 LTS

Apache Kafka

10.4 LTS

Kinesis

13.1

デフォルトのトリガー間隔はどれくらいですか?

構造化ストリーミング デフォルトから 500ms の固定間隔マイクロバッチへ。 Databricks では、新しいデータが到着したかどうかの確認や、サイズが小さいバッチの処理に関連するコストを最小限に抑えるために、常にカスタマイズされた trigger を指定することをお勧めします。

実行間のトリガー間隔の変更

同じチェックポイントを使用しながら、実行間のトリガー間隔を変更できます。

マイクロバッチの処理中に構造化ストリーミング ジョブが停止した場合、そのマイクロバッチは新しいトリガー間隔が適用される前に完了する必要があります。 そのため、トリガー間隔を変更した後、以前に指定した設定でマイクロバッチ処理が観察される場合があります。

時間ベースの間隔から AvailableNowの使用に移行すると、使用可能なすべてのレコードを増分バッチとして処理する前にマイクロバッチ処理が発生する可能性があります。

AvailableNow から時間ベースの間隔に移行すると、最後の AvailableNow ジョブがトリガーされたときに使用可能だったすべてのレコードの処理が続行される可能性があります。これは想定される動作です。

注記

増分バッチに関連付けられたクエリの失敗から回復しようとしている場合、トリガー間隔を変更しても、バッチは完了する必要があるため、この問題は解決しません。 Databricks では、バッチの処理に使用されるコンピュート容量をスケールアップして、問題の解決を試みることをお勧めします。 まれに、新しいチェックポイントを使用してストリームを再起動する必要がある場合があります。

連続処理モードとは何ですか?

Apache Spark では、 連続処理と呼ばれる追加のトリガー間隔がサポートされています。 このモードは、Spark 2.3 以降、実験的モードとして分類されています。Databricks アカウント チームに相談して、この処理モデルのトレードオフを理解していることを確認してください。

この連続処理モードは、DLT で適用される連続処理とはまったく関係がないことに注意してください。