ストリーム処理
データを受信しながらリアルタイムで処理する手法で、バッチ処理と対比される
データベースリアルタイム
ストリーム処理とは
ストリーム処理 (Stream Processing) は、データを受信しながらリアルタイムで処理する手法である。バッチ処理が「溜めてから処理」するのに対し、ストリーム処理は「流れてきたら即座に処理」する。
バッチ処理との比較
| 観点 | バッチ処理 | ストリーム処理 |
|---|---|---|
| レイテンシ | 高い (分〜時間) | 低い (ミリ秒〜秒) |
| データ量 | 大量を一括処理 | 1 件ずつ or 小バッチ |
| 処理タイミング | スケジュール実行 | イベント駆動 |
| 用途 | 日次集計、ETL | リアルタイム分析、アラート |
| AWS サービス | Glue, EMR, Athena | Kinesis, Lambda, MSK |
AWS でのストリーム処理
[データソース] → [Kinesis Data Streams] → [Lambda] → [DynamoDB / S3]
→ [Kinesis Data Firehose] → [S3 / Redshift]
AWS では Kinesis Data Streams (リアルタイムデータストリーム)、Kinesis Data Firehose (S3/Redshift への配信)、DynamoDB Streams (テーブル変更のキャプチャ)、MSK (大規模ストリーム処理)、Lambda (ストリームのコンシューマー) を組み合わせる。
ウィンドウ処理
ストリームデータを時間やカウントで区切って集計する。
| ウィンドウ | 説明 | 例 |
|---|---|---|
| タンブリング | 固定長、重複なし | 5 分ごとの売上集計 |
| スライディング | 固定長、重複あり | 直近 5 分の移動平均 |
| セッション | アクティビティベース | ユーザーセッションの分析 |
ストリーム処理の課題
順序保証は Kinesis のパーティションキーで対応する。重複処理は冪等性を確保 (DynamoDB の条件付き書き込み) して防ぐ。遅延データはウォーターマークで許容する。バックプレッシャーは Lambda の同時実行数を制限して制御する。
詳しくは関連書籍を参照。