2017-06-16 3 views
1

Apache Beamは最近、StateSpec@StateIdという注釈によって州立細胞を導入しました。Apache FlinkとGoogle Cloud Dataflowで部分的にサポートされています。Beamのステートフル処理 - ウィンドウペインで共有される状態ですか?

私の質問は、ステートフルなDoFnがウィンドウ処理されたストリームで使用されている場合の状態ガベージコレクションに関するものです。典型的には、ウインドウが切れる(ウインドウの端を透かしが通過する)とき、状態はランナーによって除去される(ガベージコレクトされる)。しかし、窓ガラスが早期にトリガーされる場合を考えると、解雇ペインが破棄されています。この場合、

input.apply(Window.<MyElement>into(CalendarWindows.days(1)) 
    .triggering(AfterWatermark.pastEndOfWindow() 
    .withEarlyFirings(
    AfterProcessingTime.pastFirstElementInPane() 
     .plusDelayOf(Duration.standardMinutes(10)) 
)) 
    .discardingFiredPanes() 
    .apply(ParDo.of(new MyStatefulDofn())); 

は、早期に解雇されたキーの状態がウィンドウの有効期限が切れた後にまで保持されますか?すなわち、同じウィンドウ内の後続のペインは、以前のペインで書かれた状態にアクセスするだろうか?

答えて

1

トリガー設定は、ParDoのステートフル処理の進行方法には影響しません。要素はバッファリング/トリガなしですぐにDoFnに提供され、出力が発生するとDoFnが直接制御されます。

出力を制御するという事実は、ステートフルParDoの処理とトリガーによって制御されるCombine.perKeyの重要な違いです。これは、多くの場合、トリガーがあなたのユースケースに十分に豊かでないときには、ステートフルなParDoが良い選択である理由です。

私はCombine +ビームのブログで私の記事でもう少し詳細にトリガーとステートフルParDo処理を比較します。その後、入力要素、今https://beam.apache.org/blog/2017/02/13/stateful-processing.html

、あなたのステートフルParDoからどこか上流GroupByKeyCombine.perKeyがある場合になります上流からのトリガーの発射に関連している。しかし、これはあなたのステートフルなParDoの状態がどのように管理されるかには影響しません。状態が要素間で維持され、「ペイン」は単なる要素であるため、ウィンドウが完全に期限切れになるまで状態は維持されます。

あなたの質問につながる非常に素敵な要約です。

関連する問題