パイプラインの更新と正常停止
Google Cloud Dataflowには、実行中のパイプラインを管理するための2つの重要な機能があります:
Updateは、実行中のストリーミングパイプラインを停止せずに、新しいバージョンのパイプラインに置き換える機能です。 既存のパイプラインの状態(ウィンドウ、集計、タイマーなど)を新しいパイプラインに引き継ぎます。
--updateフラグを指定して新しいパイプラインを起動。これらの変更が必要な場合は、Drainして新しいパイプラインを起動する必要があります。
Drainは、実行中のパイプラインを正常に停止する機能です。 新しいデータの受け入れを停止し、処理中のデータをすべて完了してからパイプラインを終了します。
| シナリオ | 推奨操作 | 理由 |
|---|---|---|
| DoFnのバグ修正 | Update | ロジック変更のみ、状態は維持、ダウンタイムなし |
| 新しい変換ステップを追加 | Update | 互換性あり、既存パイプラインを拡張 |
| ステップ名を変更したい | Drain + 新規 | 状態の互換性なし、再起動が必要 |
| パイプライン全体の再設計 | Drain + 新規 | 大規模変更、状態を引き継げない |
| 一時的な停止(メンテナンス) | Drain | データ損失なく停止、後で再起動 |
| 緊急停止(コスト削減) | Cancel | 即座に停止が必要、データ損失OK |
| Pub/SubサブスクリプションURLの変更 | Drain + 新規 | ソース変更、再起動が必要 |
| BigQuery出力テーブルの変更 | Update | シンク変更は互換性あり |
シナリオ: 本番環境のストリーミングパイプラインでバグを発見
--updateフラグで本番にデプロイシナリオ: 既存パイプラインに新しい集計ロジックを追加
--updateで段階的にロールアウトシナリオ: BigQueryの大規模なスキーマ変更を実施
シナリオ: パイプライン全体を新しいアーキテクチャに移行
シナリオ: 夜間はデータ量が少ないため一時停止してコスト削減
| 項目 | 推奨事項 |
|---|---|
| ステップ名の一貫性 | Updateを使う場合、ステップ名を変更しない。状態が失われる。 |
| 段階的ロールアウト | まずステージング環境でUpdateをテスト、問題なければ本番に適用。 |
| バックログ管理 | Drain中もPub/Subバックログが蓄積。再起動時に処理される。 |
| モニタリング | Update/Drain中のメトリクスを監視。異常があればロールバック。 |
| ドキュメント化 | 互換性のある変更/不可能な変更をドキュメント化。 |
| ロールバック計画 | Update失敗時のロールバック手順を事前に準備。 |
| 状態の互換性 | カスタム状態を使う場合、前方互換性を維持。 |
| テスト | Updateの互換性テストを自動化(CI/CD統合)。 |