リアルタイム モードリファレンス

サポートされている言語

リアルタイム モードでは、Scala、Java、およびPythonがサポートされます。

コンピューティングの種類

リアルタイム モードでは、次のコンピューティングの種類がサポートされます。

コンピューティングの種類 サポートされている
専用 (以前: シングル ユーザー) ✓
Standard (以前: 共有) ✓ (Pythonのみ)
クラシック上の Lakeflow パイプライン 構造化ストリーミングとしてサポートされていません。 パイプライン構成によってサポートされます。 「Lakeflow パイプラインでリアルタイム モードを使用する」を参照してください。
サーバーレスでの Lakeflow パイプライン 構造化ストリーミングとしてサポートされていません。 パイプライン構成によってサポートされます。 「Lakeflow パイプラインでリアルタイム モードを使用する」を参照してください。
Serverless サポートしていません

UDF を使用した待機時間の影響を受けやすいワークロードの場合、Databricks では専用アクセス モードを使用することをお勧めします。 テーブル関数を参照してください。

実行モード

リアルタイム モードでは、更新モードのみがサポートされます。

実行モード サポートされている
更新モード ✓
追加モード サポートしていません
完全モード サポートしていません

ソースとシンク

リアルタイム モードでは、次のソースとシンクがサポートされます。

ソースまたはシンク ソースとして シンクとして
Apache Kafka ✓ ✓
Event Hubs (Kafka コネクタを使用) ✓ ✓
Kinesis ✓(EFOモード推奨) サポートしていません
AWS MSK ✓ サポートしていません
Delta サポートしていません サポートしていません
Google Pub/Sub (グーグルパブサブ) サポートしていません サポートしていません
アパッチ・パルサー サポートしていません サポートしていません
任意のシンク ( forEachWriterを使用) 適用なし ✓

オペレーター

リアルタイム モードでは、ほとんどの構造化ストリーミング演算子がサポートされています。

ステートレス操作

Operator サポートされている
[選択] ✓
プロジェクション ✓
mapPartitions サポートされていません (制限を参照)
Union ✓ (いくつかの制限あり)

UDFs

Operator サポートされている
Scalaユーザー定義関数 (UDF) ✓ (いくつかの制限あり)
PYTHON UDF ✓ (いくつかの制限あり)

集約

Function サポートされている
sum ✓
数える ✓
max ✓
min ✓
avg ✓
集計関数 ✓

ウィンドウ処理

Operator サポートされている
タンブリング ✓
スライディング ✓
セッション サポートしていません

重複除去 (Deduplication)

Operator サポートされている
dropDuplicates ✓
ウォーターマーク内の重複を削除する ✓

テーブルへのストリーム結合

Operator サポートされている
内部結合 ✓
外部結合 ✓
ブロードキャスト テーブル結合 (テーブル サイズが 10 mb 以下) ✓
テーブル結合 (ブロードキャストなし) サポートしていません

ストリームからストリームへの参加

Operator サポートされている
内部結合 ✓ (Databricks Runtime 18 LTS 以降、一部の構成)
外部結合 サポートしていません

Note

ストリームを使用してリアルタイム モードで結合をストリーミングするには、追加の Spark 構成を設定する必要があります。 構成の詳細と、複数のストリームを実行するための要件については、「 ストリームからストリームへの結合」を参照してください。

任意のステートフル演算子

Operator サポートされている
(フラット)MapGroupsWithState サポートしていません
transformWithState ✓ (いくつかの違いあり)

ユーザー定義シンク

シンク サポートされている
forEach ✓
forEachBatch サポートしていません

特別な考慮事項

一部の演算子と機能は、リアルタイム モードで使用する場合、特定の考慮事項や違いがあります。

transformWithState リアルタイム モード

カスタムステートフル アプリケーションを構築するために、Databricks は Apache Spark Structured Streaming の API である transformWithState をサポートします。 APIやコードスニペットの詳細については、「transformWithStateでカスタムステートフルアプリケーションを構築する」をご覧ください。

ただし、API の動作は、マイクロバッチ クエリの場合とはリアルタイム モードでは異なります。

  • リアルタイム モードでは、各行に対して handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) メソッドが呼び出されます。
    • inputRows反復子は 1 つの値を返します。 マイクロバッチ モードでは、キーごとに 1 回呼び出され、 inputRows 反復子はマイクロ バッチ内のキーのすべての値を返します。
    • コードの記述時にこの違いを考慮する
  • イベント時間タイマーは、リアルタイム モードではサポートされていません。
  • transformWithStateInPandas はリアルタイム モードではサポートされていません。 代わりに、pandas DataFrames ではなくtransformWithState オブジェクトを使用する行ベースのRow API を使用します。
  • リアルタイム モードでは、データ到着に応じてタイマーの起動が遅れます。
    • タイマーが 10:00:00 にスケジュールされていても、データが到着しない場合、タイマーはすぐに起動しません。
    • データが 10:00:10 に到着すると、タイマーは 10 秒の遅延で起動します。
    • データが到着せず、実行時間の長いバッチが終了している場合は、バッチが終了する前にタイマーが起動します。

Note

Databricks Runtime 18.1 以下では、スループットが低く、1 秒あたり 5 レコード未満のPythonに対して transformWithState とリアルタイム モードを使用すると、待機時間が最大で数百ミリ秒に増加する可能性があります。 Databricks では、解決するために Databricks Runtime 18.2 以降にアップグレードすることをお勧めします。

Python UDF をリアルタイム モードで使用する

Databricks では、Pythonユーザー定義関数 (UDF) の大部分がリアルタイム モードでサポートされています。

ステートレス

UDF の種類 サポートされている
Python スカラー UDF (Python スカラー ユーザー定義関数 (UDF) ) ✓
矢印スカラー UDF ✓
Pandas スカラー UDF (pandas ユーザー定義関数) ✓
Arrow 関数 (mapInArrow) ✓
Pandas 関数 (マップ) ✓

ステートフル グループ化 (UDAF)

UDF の種類 サポートされている
transformWithState (インターフェイス Row のみ) ✓
transformWithStateInPandas サポートされていません。 代わりに、pandas DataFrames ではなくtransformWithState オブジェクトを使用する行ベースのRow API を使用します。 詳細については、サポートされていないtransformWithStateInPandasを参照してください。
applyInPandasWithState サポートしていません

ステートフルでないグループ化 (UDAF)

UDF の種類 サポートされている
apply サポートしていません
applyInArrow サポートしていません
applyInPandas サポートしていません

テーブル関数

UDF の種類 サポートされている
UDTF (Python ユーザー定義テーブル関数 (UDF)) サポートしていません
UC UDF サポートしていません

Python UDF をリアルタイム モードで使用する場合は、いくつかの点を考慮する必要があります。

  • 待機時間を最小限に抑えるには、方向バッチ サイズ (spark.sql.execution.arrow.maxRecordsPerBatch) を 1 に設定します。
    • トレードオフ: この構成は、スループットを犠牲にして待機時間を最適化します。 ほとんどのワークロードでは、この設定をお勧めします。
    • バッチ サイズを増やすのは、入力ボリュームに対応するためにより高いスループットが必要な場合に限り、待機時間の増加の可能性を受け入れます。
  • Pandas UDF と関数は、矢印バッチ サイズが 1 の場合、うまく機能しません。
    • pandas UDF または関数を使用する場合は、矢印バッチ サイズを高い値 (100 以上など) に設定します。
    • これは、待機時間が長いことを意味します。 Databricks では、可能であれば、方向 UDF または関数を使用することをお勧めします。
  • transformWithStateInPandas はリアルタイム モードではサポートされていません。 代わりに、pandas DataFrames ではなくtransformWithState オブジェクトを使用する行ベースのRow API を使用します。 transformWithStateInPandasはサポートされていません および Real-time モードの例行ベースの API を使用したPython例を参照してください。
  • UDF を使用した待機時間の影響を受けやすいワークロードの場合、Databricks では専用アクセス モードを使用することをお勧めします。 標準アクセス モードでは、セキュリティ分離のオーバーヘッドによって UDF のパフォーマンスが低下する可能性があります。