2017-06-05 7 views
1

Apache Flinkを使用して、複数のタイプのオブジェクトでリアルタイム集計を実行する予定です。 合計、最大値、最小値、平均値などのいくつかのタイプの集計をサポートする必要があります - これまでの特別なものはありませんApache Flink:1つのウィンドウで複数の値を計算して出力する

私たちの要件は、1つのメッセージに複数オブジェクト属性の複数の集計値が含まれているkafkaにデータを出力することです。

例えば、メッセージは

最後の10分間の合計、最大、および平均の属性Aの値とも属性Bの合計値と最小値を含める必要があり

私の質問はどのように最善の方法ですFlinkでこのような要件を実装しますか?

ウィンドウの最後にあるすべてのオブジェクトで実行されるカスタムウィンドウ関数を使用し、必要なすべての値を計算し、これらの集計値をすべて保持する新しいオブジェクトを出力します。 この解決策について懸念しているのは、メモリ内のすべてのウィンドウデータを保持して、ウィンドウが起動するのを待たなければならないということです(このようなウィンドウが同時に開かれます)。

Any提案/コメントは高く評価されています!

おかげ

答えて

1

最善のアプローチは、各ウィンドウのカウント、合計、最小、および最大を計算するために、増分集約を使用することです - あなたは合計カウント与え、あなたのウィンドウ関数で平均を計算することができます。この方法では、ウィンドウの最後で処理するためにストリーム全体をバッファリングするのではなく、この4つの値(カウント、合計、最小、および最大)を保持する必要があります。

This example from the documentationで始めるには十分です。

+0

ありがとうございます、この提案をチェックします – ranef

関連する問題