手動での交換
新旧のパイプラインが非互換になるような変更が必要になることがあります。その場合、Update の互換チェックはエラーを起こします。そのため、既存パイプラインから非互換の新パイプラインに切り替えるときは、既存の Dataflow ジョブを停止し、その代わりとして新パイプラインを起動しなければなりません。
このようなジョブの停止に対応するため、Dataflow は新たに Cancel と Drain の 2 種類のオプションを提供しています。
Cloud Dataflow Monitoring Interface の新しい “Stop Job” ダイアログでは、Cancel と Drain のいずれかを選択できます。パイプラインの Drain は、gcloud alpha dataflow jobs drain <job_id> コマンドを使って gcloud CLI から開始させることも可能です。
パイプラインを Cancel に設定すると、ジョブは終了し、ジョブ関連のすべてのリソース(Google Compute Engine 仮想マシン、永続ディスクなど)は開放されます。そして、パイプラインは直ちに終了し、インフライト データやバッファリング済みデータはすべて失われます。
Cancel のときに新パイプラインで実行を再開しても、ジョブで処理されたデータの保証という点では最も弱いものとなります。ジョブ間でデータの重複処理が発生しないことだけは保証されますが(たとえば、入力ソースが exactly-once セマンティクスを提供していない場合)、インフライト データの消失は起こります。
これに対して Drain では、直ちにジョブが停止することはありません。ジョブの停止のために Drain を使うと、ジョブは入力ソースの読み出しを止めるものの、インフライトおよびバッファリング済みのデータの処理は最後まで行われ、オープン ウィンドウの内容を押し出すトリガはすべて発生します。
ただし、この場合、ウィンドウは不完全なものになることがあります。ドレイン中に閉じられるウィンドウには、ドレイン開始時にすでに入力ソースから読み出され、バッファリングされたデータしか含まれていないのです。
Drain は、Cloud Pub/Sub ソースから取り出されたすべてのメッセージが認識されることを保証し、すべての
無制限カスタム ソースの finalize() 呼び出しを保証します。バッファリングされたデータがすべて処理され、ジョブに与えられていたすべてのリソースが開放されたことを Dataflow が検出すると、ジョブは停止します。
このように、Drain は at-least-once(少なくとも 1 回)セマンティクスを提供します。これは、Update の強力な保証と、Cancel の極めて弱い保証の中間点と言えるでしょう。ソースが exactly-once を保証しない場合はデータの重複処理が発生することがありますが、すべてのインフライト データの処理は保証します(インフライト データの扱いについては Update と似ています)。
方法 |
処理セマンティクス |
その場で Update |
exactly-once |
Drainして交換 |
At-least-once3 |
Cancel して交換 |
なし |
Nice post i see ever. Information is so reliability. Thanks for share us.
返信削除Microsoft Office365