バッチ対ストリーム:When What
なぜ選ぶのか
遅延、コスト、サポートの複雑さ、および信頼性の間の任意のデータシステムのバランス。
バッチ-レコードあたりの高帯域幅と低コストのデータの定期的な「チャンク」。
ストリーム-メモリ/ローカルセクタの遅延と状態を最小限に抑えたイベントの連続処理。
モデルについて簡単に
Batch(バッチ)
ソース:ファイル/テーブル/スナップショット。
トリガー:スケジュール(時間/日)または条件(新しい寄木細工ファイル)。
強み:シンプルさ、決定論、完全なデータコンテキスト、安価な大きな再計算。
弱い:リアルタイム信号なしで「オンライン」「、高レイテンシ」「、ウィンドウ」はありません。
ストリーミング
出典: ブローカー(Kafka/NATS/Pulsar)、 CDC、キュー
トリガー:イベント。
強い:低いレイテンシー、反応性、プロダクトとの自然な統合。
弱い:時間の複雑さ(イベントと処理)、順序/重複、状態、操作。
ソリューション: 選択行列
ルール80/20: SLAが分/時の遅延を許可し、リアクティブな機能がない場合は、バッチを取ります。反応が重要である場合は「、今ここ」またはライブショーケースが必要です-ストリーム(多くの場合、和解のための追加の夜間バッチ)。
典型的なシナリオ
バッチ-より良い場合:- 毎日のレポート、期間内の請求、MLトレーニング、大規模な参加、重複排除「セット全体で」。
- メダリオンモデル(ブロンズ/シルバー/ゴールド)と深い検証。
- マスバックテストとショップウィンドウの再構成。
- 詐欺/監視、SREアラート、リアルタイムバランス/ミッション、「今」の推奨事項。
- Event-as-fact (EDC)統合、Materialized Views Update (CQRS)。
- マイクロサービス:通知、Webhook、ビジネスイベントへの反応。
- 流れは操作上の表示および信号を発生させます;夜のバッチは和解を行います、金庫室と安価な歴史的な回顧録。
アーキテクチャ
ラムダ(ストリーム+バッチ)
増分およびオンラインのための流れ;完全性と修正のためのバッチ。
長所:柔軟性とSLA。短所:ダブルロジック、コードの重複。
Kappa(-ストリーム+リプレイ)
真実の源としての単一のログ;batch-recalculations=replay。
長所:1コードベース、単一のセマンティクス。短所:操作がより困難で、ストレージ要件を記録します。
ハイブリッド・プラグマティック
「オペレーティングシステム」のストリーミング+重い結合/ML/修正のための定期的なバッチジョブ。
実際には、最も一般的なオプションです。
時間、順序、窓(ストリームのために)
処理時間ではなく、イベント時間に依存します。
透かしと'allowed_lateness'を管理します。後のイベントのリトラクション/アップサートをサポートします。
単位キーによるパーティション、計画「ホットキー」。
効果の信頼性と意味論
Batch(バッチ)
データベーストランザクションまたはバッチ/テーブルの原子置換。
Idempotency-決定論的コンピューティングと上書き/insert-overwriteによる。
ストリーミング
At-once+idempotentシンク(upsert/merge、 aggregatesのバージョン)。
EOSのためのトランザクション「read-write-fix position」エフェクト別。
'event_id'/'operation_id'による重複除外テーブル。
ボルトとフォーマット
Batch(バッチ)
Data Lake (Parquet/Delta/Iceberg)、 OLAP (ClickHouse/BigQuery)、オブジェクトストレージ。
原子交換のためのACIDテーブル、タイムトラベル。
ストリーミング
ブローカー、ステートストア(RocksDB/embedded)、 KV/Redis、投影用OLTPのログ/トピック。
スキーマレジストリ(Avro/JSON/Proto)、互換モード。
コストとSLO
バッチ:あなたはバッチで支払う-それは大量で有益ですが、スケジュール≥遅延。
ストリーム:一定のランタイムリソース、高いQPSでのピークコスト。しかし、SLAは秒単位です。
p95/p99レイテンシ、パススルーラグ、cu/eventのコストをカウントし、TCOをサポートします。
テスト
共通:ゴールデンセット、プロパティベースの不変量、汚れた入力生成。
バッチ:determinacy、 idempotent restarts、ボルトの比較の前後。
ストリーム:順序外/重複、エフェクトとオフセット固定の間のフォルトインジェクション、リプレイテスト。
観測可能性
バッチ:仕事の持続期間、失敗/後退の共有、店の窓の新鮮さ、スキャン費用。
ストリーム:時間/メッセージラグ、透かし、レイトレート、ステートサイズ/チェックポイント頻度、DLQレート。
どこでも:'trace_id'、 'event_id'、スキーム/パイプラインのバージョン。
セキュリティとデータ
PII/PCI-回路内のフィールド('x-pii')を最小化し、休止/機内で暗号化します。
ストリームの場合-状態/チェックポイントの保護、トピックのACL。
GDPR/忘れられる権利:in Stream-投影中の暗号消去/編集;バッチで-バッチの再計算。
トランジション戦略
バッチ→ストリーム:イベント(Outbox/CDC)を公開することから始め、既存の金庫に触れることなく小さなリアルタイムショーケースを上げます。
ストリーム→バッチ-ストリーミングシンクのレポート/調整と負荷軽減のための毎日のボルトを追加します。
アンチパターン
ファッションのための「All in Stream」:本当の必要なしに高価で困難。
「1つの巨大な夜のバッチ」要件<5分。
ビジネスメトリックの処理時間を使用します。
公開イベントとしてのRaw CDC: Tight Connectivity、 Pain in Evolution。
シンク→再起動時のダブルエフェクトには特異性はありません。
選択チェックリスト
- 鮮度SLO:何秒/分/時間は受諾可能ですか?
- 入力安定性:アウトオブオーダー/重複はありますか?
- オンラインリアクション/ストアフロントは必要ですか?
- コスト:ランタイム24/7と「スケジュールされたウィンドウ」。
- 補正方法は、リトラクト/アップサートまたは夜間再計算です。
- チームと運用の成熟度(observability、 on-call)。
- 「ちょうど1つの効果」のための条件。
- PIIポリシー/保持/忘れられる権利。
参照パターン
運用ショーケース(ハイブリッド):- ストリーム:EDC→投影(KV/Redis、 OLTP) UI用、idempotent upsert。
- バッチ:OLAPの夜間保管庫、和解、ML機能。
- ストリーム:セッションウィンドウ、CEPルール、アラート<1-5 s。
- バッチ:モデルの再訓練、オフライン検証。
- ストリーム:トリガー、リアルタイムセグメント。
- バッチ:スコアリング、LTVモデル、レポート。
FAQ(よくある質問)
バッチで「ほぼリアルタイム」を取得することは可能ですか?
はい:マイクロバッチ/トリガージャブ(1〜5分ごと)-妥協ですが、Windows/Late-eventsの複雑さはありません。
ラムダのアプローチはどこでも必要ですか?
いいえ、そうではありません。スレッドがすべてのタスクを閉じ、リプレイの方法を知っている場合-Kappaは長くする方が簡単です。そうでなければ-ハイブリッド。
費用を計算する方法か?
合計計算+ストレージ+ops。ストリームの場合、「24/7」のダウンタイム価格と緊急の夜を追加します。バッチ-「期限切れ」データの価格。
[結果]
低コスト、シンプルさ、期間保管が重要な場合は、バッチを選択してください。ストリーム-反応性と鮮度が重要な場合。実際には、ハイブリッドが勝つ:ストリーム-オンラインと信号、バッチ-完全性と安価な歴史的再計算のために。主なものは、SLOを設定し、idempotency/observabilityを確保し、事前に補正パスを設計することです。