5章 Exactly-Once and Side Effects
この章では Dataflow や他のシステムがどうやって exactly once を実装しているかを見ます.
- exactly once: 全てのレコードがちょうど1回処理される.
- at most once: 全てのレコードが高々1回処理される.
- at least once: 全てのレコードが最低1回処理される.
これらはパイプライン全体を通しての処理およびある注目している一箇所について用いられます.
後者は例えば DoFn -> Runner の呼び出し や sink の処理など.
Why Exactly Once Matters
正確な結果を得たいので... (当たり前)
障害となるのは例えば
- (パイプラインを初理している) ノード故障
- DoFn などで呼び出される Runner が処理を完了できなかった場合
低レイテンシと正確性のために, 例えば1章で紹介した Lambda architecture を用いることができる.
が, 問題は
- Inaccuracy
- 前段の streaming 処理の正確性が低すぎる場合がある. (悪い日には 10% かそれ以上.)
- 正確性が低いと速報値であっても役に立たないと見做され得る.
- Inconsistency
- ふたつのパイプラインが (少なくとも意味的に) 同じだという保証が難しい.
- Complexity
- Unpredictability
- Latency
- ユースケースによっては低レイテンシかつ正確であって欲しい.
Accuracy Versus Completeness
Exactly once は completeness に効くのであって accuracy に効くのではない.
completeness をバッチの場合と同じにするのが目的.
(許容時間内に届いたレコードをちゃんと処理する仕組み. バッチでも遅れて来たものは捨てる.)
Side Effects