Mímisbrunnr知恵の泉

← データエンジニアリング 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:データエンジニアリングとは・役割 | 関連:現代データスタックの地図ストリーム処理

要点(BLUF)

概念 ── 「ためて処理」か「流して処理」か

バッチ処理は、1日分・1時間分のデータをためて、定時に一括変換します(夜間バッチが典型)。ストリーム処理は、1件のイベント(注文・クリック・センサー値)が発生するたびに、数秒以内に処理します。

要するに違いは「処理の単位」です。バッチは「ファイル/テーブルの塊」、ストリームは「1イベント(あるいは小さなマイクロバッチ)」。この単位の違いが、鮮度・コスト・実装の難しさをすべて左右します。

flowchart LR
    subgraph B["バッチ"]
      direction LR
      B1["ためる(1日分)"] --> B2["定時に一括処理"] --> B3["結果テーブル更新"]
    end
    subgraph S["ストリーム"]
      direction LR
      S1["イベント発生"] --> S2["即時処理(数秒)"] --> S3["逐次更新"]
    end

設計の勘所 ── トレードオフ表

観点バッチストリーム
鮮度(レイテンシ)数時間〜1日数ミリ秒〜数秒
スループット高い(一括で効率的)高いが運用が難しい
実装・運用の複雑さ低い高い(状態管理・順序・遅延データ)
コスト低め(必要なときだけ計算)高め(常時稼働)
再実行・デバッグ容易(同じ入力で再実行)難しい(時間が絡む)
典型用途日次集計・レポート・ML学習不正検知・モニタリング・即時推薦

ストリームの難しさの核心は「時間」です。イベントが発生した時刻(イベント時間)と処理した時刻(処理時間)がずれ、ネットワーク遅延で順序も狂います。この「遅延データ」「ウィンドウ集計」の扱いは ストリーム処理 で詳述します。

なぜそうするか ── まずバッチ、が定石

なぜ「とりあえずストリーム」が危ういのか。ストリームは常時稼働・状態管理・順不同/遅延データの処理を要求し、運用負荷とコストがバッチの数倍になります。一方で多くの業務(日次売上、月次レポート、ML学習データ)は鮮度が分〜日で十分

定石は次の順です。(1) 鮮度要件を数値で確認(「何分遅れまで許せるか」)→ (2) バッチ(必要なら頻度を上げる:マイクロバッチ)で満たせるか試す(3) どうしても秒単位が要る部分だけストリーム化。鮮度は「あれば嬉しい」ではなく「いくら払う価値があるか」で決めます。

なお、近年は micro-batch(数分間隔の小バッチ)が両者の中間として実用的で、「ほぼリアルタイム」の要件をバッチ寄りの簡単さで満たせることが多いです。

⚠️ よくある落とし穴

対応ラボ

なし(概念回)。ストリームの実装的な側面は第7章で扱う。

関連

第1章 データエンジニアリングの全体像 目次