ストリーミング基礎
田中VPoE「バッチ処理のパイプラインは完成した。しかし、NetShop社のビジネスはリアルタイム性を求めている。不正検知やリアルタイムレコメンドは、日次バッチでは間に合わない。」
あなた「ストリーミング処理ですね。イベントが発生したらすぐに処理する仕組みが必要なんですか?」
田中VPoE「その通り。バッチとストリーミングの違い、使い分けを理解することが第一歩だ。」
バッチ処理 vs ストリーミング処理
| 項目 | バッチ処理 | ストリーミング処理 |
|---|---|---|
| 処理タイミング | 定期的(時間/日次) | リアルタイム(秒〜分) |
| データ量 | 大量データを一括処理 | 1件ずつまたは小バッチ |
| レイテンシ | 高(分〜時間) | 低(ミリ秒〜秒) |
| 再処理 | 容易(全データ再処理) | 困難(状態管理が必要) |
| 複雑さ | 低 | 高 |
| ユースケース | レポート、ETL | 不正検知、リアルタイム推薦 |
ストリーミングの基本概念
イベント駆動アーキテクチャ
[Producer] → [Message Broker] → [Consumer]
注文イベント Kafka等 処理ロジック
主要な概念
| 概念 | 説明 |
|---|---|
| イベント | 何かが発生したことを表すデータ(注文、クリック等) |
| プロデューサー | イベントを生成・送信する側 |
| コンシューマー | イベントを受信・処理する側 |
| トピック | イベントのカテゴリ(注文トピック、クリックトピック等) |
| オフセット | トピック内のイベントの位置(読み取り位置管理) |
メッセージ配信保証
| 保証レベル | 説明 | ユースケース |
|---|---|---|
| At-most-once | 最大1回配信(ロスト可能) | ログ収集、メトリクス |
| At-least-once | 最低1回配信(重複可能) | 一般的なイベント処理 |
| Exactly-once | 正確に1回配信 | 決済、在庫管理 |
ウィンドウ処理
ストリーミングデータを集計するには、時間ウィンドウを定義します。
ウィンドウの種類
| 種類 | 説明 | 例 |
|---|---|---|
| タンブリング | 固定長・重複なし | 5分ごとの注文数カウント |
| スライディング | 固定長・重複あり | 直近10分間の移動平均(1分スライド) |
| セッション | 非活動期間で区切る | ユーザーセッションごとの行動集計 |
タンブリングウィンドウ:
|---W1---|---W2---|---W3---|
0 5 10 15 (分)
スライディングウィンドウ (size=10, slide=5):
|----W1----|
|----W2----|
|----W3----|
0 5 10 15 20 (分)
セッションウィンドウ (gap=5分):
|--S1--| |---S2---| |S3|
活動 非活動 活動 非活動 活動
ストリーミング処理フレームワーク
| フレームワーク | 特徴 | ユースケース |
|---|---|---|
| Apache Kafka Streams | Kafkaネイティブ、軽量 | Kafkaエコシステム内の処理 |
| Apache Flink | 低レイテンシ、状態管理が強力 | 大規模ストリーム処理 |
| Apache Spark Structured Streaming | バッチとの統一API | バッチ+ストリーム統合 |
| Amazon Kinesis | AWSマネージド | AWSエコシステム |
まとめ
| 項目 | ポイント |
|---|---|
| バッチ vs ストリーミング | レイテンシ要件とユースケースで使い分け |
| 基本概念 | イベント、プロデューサー/コンシューマー、トピック、オフセット |
| 配信保証 | at-most-once、at-least-once、exactly-onceの3レベル |
| ウィンドウ | タンブリング、スライディング、セッションの3種類 |
チェックリスト
- バッチ処理とストリーミング処理の違いと使い分けを説明できる
- イベント駆動アーキテクチャの基本概念を説明できる
- メッセージ配信保証の3つのレベルを説明できる
- 3種類のウィンドウ処理の違いを説明できる
次のステップへ
ストリーミング処理の基礎を理解しました。次はApache Kafkaの詳細を学びましょう。
推定読了時間:30分