Flink Stream窗口内存使用情况



我正在评估Flink,专门针对可能生成警报的流窗口支持。我担心的是内存的使用,所以如果有人能帮忙,我将不胜感激。

例如,该应用程序将在例如5分钟的给定翻滚窗口内潜在地消耗流中的大量数据。在评估时,例如,如果有一百万个文档符合标准,它们会全部加载到内存中吗?

一般流程为:

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

此外,如果有一些明确的文档描述了在这些情况下如何处理记忆,而我可能忽略了这一点,那将是有帮助的。

感谢

为组窗口聚合存储的数据量取决于聚合的类型。许多聚合函数,如COUNTSUMMIN/MAX,都可以进行预聚合,即它们只需要在每个窗口存储一个值。其他聚合函数,如MEDIAN或某些用户定义的聚合函数,在计算结果之前需要存储所有值。

聚合需要存储的数据存储在状态后端。根据状态后端的选择,数据可能存储在JVM堆的内存中,也可能存储在RocksDB实例的磁盘上。

表API查询还通过关系优化器(基于ApacheCalcite)进行优化,以便将过滤器推送到尽可能远的源。根据谓词的不同,过滤器可能会在聚合之前应用。

最后,您需要在示例查询的window()select()之间添加一个groupBy()(请参阅文档中的示例)。

最新更新