2017-11-04 237 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