flink流窗口内存使用

42fyovps  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(540)

我正在评估flink是否支持流媒体窗口生成警报。我关心的是内存使用,所以如果有人能帮助这将不胜感激。
例如,该应用程序将在给定的滚动窗口(例如5分钟)内潜在地消耗来自流的大量数据。在评估的时候,比如说有一百万个文档符合标准,它们都会被载入内存吗?
一般流程如下: producer -> kafka -> flinkkafkaconsumer -> table.window(Tumble.over("5.minutes").select("...").where("...").writeToSink(someKafkaSink) 此外,如果有一些清晰的文档描述了在这些情况下如何处理记忆,我可能忽略了有人可能会发现这将是有帮助的。
谢谢

fzsnzjdm

fzsnzjdm1#

为组窗口聚合存储的数据量取决于聚合的类型。许多聚合函数,例如 COUNT , SUM ,和 MIN / MAX 可以预先聚合,即每个窗口只需要存储一个值。其他聚合函数,例如 MEDIAN 或者某些用户定义的聚合函数,在计算结果之前需要存储所有值。
聚合需要存储的数据存储在状态后端。根据状态后端的选择,数据可能存储在jvm堆的内存中,也可能存储在rocksdb示例的磁盘上。
表api查询也由一个关系优化器(基于apachecalcite)优化,这样过滤器就被尽可能地推向源。根据 predicate 的不同,可以在聚合之前应用筛选器。
最后,您需要添加 groupBy() 介于 window() 以及 select() 在示例查询中(请参阅文档中的示例)。

相关问题