2017-11-04 121 views
2

我正在評估Flink專門爲流式窗口支持生成可能的警報。我關心的是內存使用情況,所以如果有人可以幫助,這將不勝感激。Flink流窗口內存使用

例如,該應用程序將在給定的翻滾窗口(比如說5分鐘)內從該流潛在地消耗大量的數據。在評估的時候,如果說有一百萬份符合條件的文檔,它們是否都會被加載到內存中?

的一般流程是:

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

此外,如果是描述如何內存在這些情況下,我可能忽略的人可以出來,這將是被處理了一些清晰的文檔很有幫助。

謝謝

回答

3

爲組窗口聚合存儲的數據量取決於聚合類型。諸如COUNT,SUMMIN/MAX之類的許多彙總函數可以被預先集合,即它們只需要爲每個窗口存儲單個值。其他聚合函數(如MEDIAN或某些用戶定義的聚合函數)需要存儲所有值,然後才能計算其結果。

需要爲集合存儲的數據存儲在state backend中。根據狀態後端的選擇,數據可能存儲在JVM堆中的內存中或RocksDB實例中的磁盤上。

表API查詢也通過關係優化器(基於Apache Calcite)進行了優化,以便儘可能將篩選器儘可能地推送到源代碼中。根據謂詞,過濾器可能在聚合之前應用。

最後,您需要在示例查詢中查看window()select()之間的groupBy()(請參閱docs中的示例)。

+0

謝謝,你提供的狀態後端鏈接似乎是我正在尋找。 – Sam