Structured Streaming vs Kinesis vs Oracle Streaming:ストリーミング処理の比較

この記事について

Databricks の Structured Streaming、AWS Kinesis、Oracle Streaming Service の3つのストリーミング処理基盤を比較する。

1. サービス概要

観点 Structured Streaming Kinesis Oracle Streaming
種別 ストリーム処理エンジン メッセージングサービス メッセージングサービス
基盤 Apache Spark AWS 独自 Apache Kafka 互換
処理モデル マイクロバッチ / Continuous Consumer が処理 Consumer が処理
管理 Databricks クラスタ フルマネージド フルマネージド

重要な違い:Structured Streaming は「処理エンジン」であり、Kinesis / Oracle Streaming は「メッセージング基盤」である。Structured Streaming は Kinesis や Kafka からデータを読み取って処理する側。

[Producer] → [Kinesis / Kafka / Oracle Streaming] → [Structured Streaming] → [Delta Lake]
              メッセージング基盤                      処理エンジン              出力先

2. Structured Streaming

2-1. 処理モデル

入力ストリーム(無限のテーブルとして扱う)
  │
  ▼
┌──────────────────────┐
│ マイクロバッチ処理      │
│ (デフォルト: トリガー間隔で小バッチ) │
│                      │
│ or Continuous 処理    │
│ (低レイテンシ、ミリ秒)  │
└──────────┬───────────┘
           ▼
  出力(Delta Lake, Kafka, コンソール等)

2-2. バッチとストリーミングの統一

Structured Streaming の最大の特徴は、バッチと同じ API でストリーミング処理を書けること。

# バッチ
df = spark.read.format("delta").load("s3://data/orders")
result = df.groupBy("date").agg(sum("amount"))

# ストリーミング(ほぼ同じコード)
df = spark.readStream.format("delta").load("s3://data/orders")
result = df.groupBy("date").agg(sum("amount"))
result.writeStream.format("delta").start("s3://data/daily_sales")

2-3. Exactly-Once 保証

コンポーネント 保証方法
ソース オフセット管理(チェックポイント)
処理 マイクロバッチの原子性
シンク 冪等な書き込み(Delta Lake の ACID)

チェックポイントにより、障害時に最後に成功したマイクロバッチから再開できる。

2-4. ウォーターマーク

遅延データの処理を制御する。

df.withWatermark("event_time", "10 minutes") \
  .groupBy(window("event_time", "5 minutes")) \
  .agg(sum("amount"))
# → 10分以上遅れたデータは破棄

3. 3サービス比較

3-1. メッセージング基盤として

観点 Kinesis Data Streams Oracle Streaming Kafka(参考)
プロトコル AWS 独自 API Kafka 互換 API Kafka プロトコル
パーティション シャード パーティション パーティション
スループット 1MB/s per シャード Kafka 互換 設定依存
保持期間 24h〜365日 24h〜7日 設定依存
順序保証 シャード内 パーティション内 パーティション内
マネージド ❌(MSK は ✅)

3-2. ストリーム処理エンジンとして

観点 Structured Streaming Kinesis Data Analytics OCI Data Flow
エンジン Spark Apache Flink Spark
処理モデル マイクロバッチ / Continuous 真のストリーミング マイクロバッチ
レイテンシ 秒〜分(マイクロバッチ) ミリ秒 秒〜分
ステート管理 チェックポイント Flink State Backend チェックポイント
SQL サポート ✅ Spark SQL ✅ Flink SQL ✅ Spark SQL
Delta Lake 統合 ネイティブ

4. ユースケース別の推奨

ユースケース 推奨構成
ログ → S3 に配信 Kinesis Firehose(最もシンプル)
リアルタイム集計 → ダッシュボード Kinesis + Flink(低レイテンシ)
ストリーミング ETL → Delta Lake Kinesis + Structured Streaming
バッチ + ストリーミング統合 Structured Streaming(コード統一)
Kafka 既存環境の移行 Oracle Streaming(Kafka 互換)

5. Databricks でのストリーミングパイプライン

[IoT / アプリ]
     │
     ▼
[Kinesis Data Streams / Kafka]
     │
     ▼
[Structured Streaming on Databricks]
     │ Auto Loader or readStream
     ▼
[Delta Lake (Bronze)]
     │ DLT (Streaming)
     ▼
[Delta Lake (Silver)]
     │ DLT
     ▼
[Delta Lake (Gold)]
     │
     ▼
[SQL Warehouse / BI]

この構成の利点: – メッセージング → 処理 → ストレージ → 分析が1つのプラットフォーム – バッチとストリーミングが同じ Delta Lake テーブルに書き込み – Unity Catalog で統合ガバナンス

6. まとめ

観点 Structured Streaming Kinesis Oracle Streaming
種別 処理エンジン メッセージング メッセージング
強み バッチ統一、Delta Lake 統合 AWS 統合、Firehose Kafka 互換
レイテンシ 秒〜分 ミリ秒(Streams) ミリ秒
マルチクラウド
  • Structured Streaming は「処理エンジン」であり、Kinesis / Kafka と組み合わせて使う
  • バッチとストリーミングを統一したい場合は Structured Streaming が最適
  • 真のミリ秒レイテンシが必要な場合は Flink(Kinesis Data Analytics)を検討

次回からは Databricks のレイクハウスアーキテクチャを深掘りする。

参考文献

  • Databricks. “Structured Streaming.” https://docs.databricks.com/en/structured-streaming/
  • AWS. “Amazon Kinesis.” https://docs.aws.amazon.com/kinesis/
  • Oracle. “OCI Streaming.” https://docs.oracle.com/en-us/iaas/Content/Streaming/
  • Tyler Akidau et al. “Streaming Systems.” O’Reilly Media, 2018.

コメントする