ストリーム処理

データを受信しながらリアルタイムで処理する手法で、バッチ処理と対比される

データベースリアルタイム

ストリーム処理とは

ストリーム処理 (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 の同時実行数を制限して制御する。

詳しくは関連書籍を参照。

関連用語