2017-11-04 9 views
2

私は、可能なアラート生成のためのストリーミングウィンドウのサポートのためにFlinkを特に評価しています。私の心配はメモリの使用量なので、誰かがこれを手伝ってくれれば感謝します。Flinkストリームウィンドウメモリ使用量

たとえば、このアプリケーションは、指定された転倒ウィンドウ内のストリームから、例えば5分のような大量のデータを消費することになります。評価の時点で、たとえば基準に合致する百万の文書があるとすれば、それらはすべてメモリにロードされますか?

一般的な流れは次のようになります。

producer -> kafka -> flinkkafkaconsumer -> table.window(Tumble.over("5.minutes").select("...").where("...").writeToSink(someKafkaSink)

また、メモリは、私は誰かが外にそれは可能だろうができることを見落としている可能性がこれらのケースで対処されている方法について説明し、いくつかの明確な文書があれば役に立った

おかげ

答えて

3

グループウィンドウ集約のために格納されるデータの量は、凝集のタイプに依存します。 COUNT,SUM、およびMIN/MAXのような多くの集約関数は事前に集約することができます。つまり、1つのウィンドウにつき1つの値を格納するだけです。 MEDIANなどの他の集計関数や特定のユーザー定義集計関数は、結果を計算する前にすべての値を格納する必要があります。

集計のために格納する必要があるデータはstate backendに格納されます。状態バックエンドの選択に応じて、データはJVMヒープ上のメモリまたはRocksDBインスタンス内のディスクに格納されます。

テーブルAPIクエリは、(Apache Calciteに基づく)リレーショナルオプティマイザによって最適化され、フィルタはソースにできるだけ遠くにプッシュされます。述部によっては、集約の前にフィルターが適用されることがあります。

は最後に、あなたは(docsの例を参照してください)あなたの例のクエリでwindow()select()groupBy()を追加する必要があります。

+0

あなたが提供した州のバックエンドリンクは、私が探しているものと思われます。 – Sam