複数の入力ストリームを処理するDataflowジョブを実行しています。それらの中にはトラフィックが多いものもあれば、メッセージを受け取ったものはほとんどありません。すべてのストリームに、すべての要素に関連する情報を含む「共有」ストリームに参加しています。これは、パイプラインの単純化した例です。Dataflowパイプラインは、GroupByを実行する前にすべてのストリームから要素を待ちます。
私は両方ストリームが一部のトラフィックが含まれてまでジョブは、任意の出力を生成しないことに気づきました。
たとえば、は一定期間メッセージを生成しませんが、Stream 1
はトラフィックの流れが安定しているとします。この時点では、ジョブのDAGは、GroupByKey
のステップで累積されている要素を表示しますが、それを超えて何も伝搬されません。また、グラフの左側の入力要素を表示するFlatten PCollectionのステップが表示されますが、右側のグラフは表示されません。これは、高い仕事量のトラフィックを扱うときに、Stream 2
がメッセージを受け取るのにかかる時間だけ出力を遅らせるため、同じ仕事でトラフィック量の少ないストリームとを処理するときに問題を引き起こします。
私は、観察が正しいかどうかわかりませんが、Flatten/GroupByKeyが一般的にどのように機能しているか尋ねたかったのですが、もしそうならば、私たちが見ている問題を避けることができます。パイプライン。
(例ジョブID:2017-02-10_06_48_01-14191266875301315728)
この手順ではどのような種類のウィンドウとトリガーを使用していますか?ストリームの要素がなくても動作するように、ウィンドウ/トリガーを設定できるはずです。 – Pablo
@Pablo 'FixedWindows'と' Sessions'は、デフォルトのトリガーと、30分分のギャップ時間を持っています。 私が知っている限り、処理時間や要素数を早めに追加したトリガを追加することはできますが、セッションの一部が不完全であることを意味するので避けたいと思います(30分間の非アクティブペインが放火されたときに通過しなかった可能性があります)。 – livathinos