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

Databricks でのバッチデータ処理とストリーミングデータ処理

この記事では、データエンジニアリング ワークロードに使用される 2 つの異なるデータ処理セマンティクス (インジェスト、変換、リアルタイム処理など) であるバッチとストリーミングの主な違いについて説明します。

ストリーミングは、一般に、Apache Kafka などのメッセージバスからの低レイテンシで継続的な処理に関連付けられています。

ただし、Databricks では、より広範な定義があります。DLT の基盤となるエンジン (Apache Spark と 構造化ストリーミング) は、バッチ処理とストリーミング処理のための統一アーキテクチャを備えています。

  • エンジンは、 クラウド オブジェクト ストレージDelta Lake などのソースをストリーミング ソースとして扱い、効率的な増分処理を行うことができます。
  • ストリーミング処理は、トリガー方式と連続式の両方で実行できるため、ストリーミングワークロードのコストとパフォーマンスのトレードオフを柔軟に制御できます。

バッチとストリーミングを区別する基本的なセマンティックの違い (長所と短所、ワークロードに対して選択するための考慮事項など) を次に示します。

バッチセマンティクス

バッチ処理では、エンジンはソースですでに処理されているデータを追跡しません。ソースで現在使用可能なすべてのデータは、処理時に処理されます。実際には、バッチ データソースは通常、データの再処理を制限するために、日や地域など、論理的に分割されます。

たとえば、電子商取引会社によって実行される販売イベントについて、時間単位で集計された平均品目販売価格の計算をバッチ処理としてスケジュールし、時間ごとの平均販売価格を計算できます。 バッチを使用すると、前の時間のデータが毎時間再処理され、以前に計算された結果が上書きされて最新の結果が反映されます。

バッチ処理

ストリーミング セマンティクス

ストリーミング処理では、エンジンは処理されているデータを追跡し、後続の実行で新しいデータのみを処理します。上記の例では、バッチ処理の代わりにストリーミング処理をスケジュールして、1時間ごとの平均販売価格を計算できます。ストリーミングでは、前回の実行以降にソースに追加された新しいデータのみが処理されます。完全な結果を確認するには、新しく計算された結果を以前に計算された結果に追加する必要があります。

ストリーミング処理

バッチとストリーミング

上記の例では、ストリーミングは、以前の実行で処理されたのと同じデータを処理しないため、バッチ処理よりも優れています。ただし、ストリーミング処理は、ソース内の順不同や遅延到着などのシナリオでより複雑になります。

到着遅延データの例としては、最初の 1 時間の売上データの一部が 2 時間目までソースに到着しない場合が挙げられます。

  • バッチ処理では、最初の 1 時間の遅延到着データは、2 時間目のデータと最初の 1 時間の既存のデータで処理されます。最初の1時間の以前の結果は上書きされ、到着が遅れたデータで修正されます。
  • ストリーミング処理では、最初の 1 時間から遅れて到着したデータは、処理された他の最初の 1 時間のデータなしで処理されます。処理ロジックは、前の結果を正しく更新するために、最初の 1 時間の平均計算の合計とカウントの情報を格納する必要があります。

これらのストリーミングの複雑さは、通常、 結合集計重複排除などの処理がステートフルである場合に導入されます。

ソースからの新しいデータの追加など、ステートレスなストリーミング処理の場合、データがソースに到着するときに遅延到着データを以前の結果に追加できるため、順不同および遅延到着データの処理はそれほど複雑ではありません。

次の表は、バッチ処理とストリーミング処理の長所と短所、およびこれら 2 つの処理セマンティクスをサポートするさまざまな製品機能の概要を示しています Databricks LakeFlow。

バッチ

ストリーミング

長所

  • 処理ロジックがシンプルです。 - 結果は常に正確であり、ソースで利用可能なすべてのデータが反映されます。
  • 効率的で、新しいデータのみが処理されます。 - より速く、数時間から数分、秒、ミリ秒までのレイテンシー要件を処理できます。

短所

  • 効率が悪い。データは特定のバッチ パーティションで再処理されます。 - 低速で、数時間から数分の遅延要件を処理できますが、数秒やミリ秒は処理できません。
  • 処理ロジックは、特に結合、集計、重複排除などのステートフルな処理の場合、複雑になる可能性があります。 - 順不同や到着遅延のデータを考慮すると、結果が常に正確であるとは限りません。

データエンジニアリング製品

推奨 事項

次の表は、 メダリオンアーキテクチャの各レイヤーでのデータ処理ワークロードの特性に基づいて推奨される処理セマンティクスの概要を示しています。

メダリオンレイヤー

ワークロードの特性

推奨事項

ブロンズ

  • インジェスト ワークロード。 - 通常、データソースからの増分追加のための処理は行われないか、ステートレスな処理が行われます。 - 通常、データのサイズは大きくなります。
  • ユーザーがストリーミングの利点を享受できる一方で、ステートフルなストリーミング処理の複雑さにさらされることがないため、ストリーミング処理は一般的により良い選択肢です。

シルバー

  • トランスフォーメーション ワークロード。 - 通常、フィルタリングなどのステートレス処理と、結合、集計、重複排除などのステートフル処理の両方が含まれます。
  • バッチ処理 (マテリアライズドビューの 増分更新 を使用) を使用して、ステートフル ストリーミング処理の複雑さを回避します。 - 結果の精度よりも効率とレイテンシがはるかに重要なユースケースのオプションとしてストリーミング処理を使用します。ステートフルなストリーミング処理によってもたらされる複雑さに注意してください。

ゴールド

  • ラストマイルの集計ワークロード。 - 通常、結合や集計などのステートフルな処理が含まれます。 - 一般的に、データのサイズは小さくなります。
  • バッチ処理 (マテリアライズドビューの 増分更新 を使用) を使用して、ステートフル ストリーミング処理の複雑さを回避します。