Sam*_*Sam 2 apache-flink flink-streaming
我正在评估 Flink,专门针对可能生成警报的流窗口支持。我担心的是内存使用情况,因此如果有人可以提供帮助,我们将不胜感激。
例如,该应用程序可能会在给定的滚动窗口(例如 5 分钟)内消耗来自流的大量数据。在评估时,如果有一百万个文档符合标准,它们是否都会被加载到内存中?
一般流程是:
producer -> kafka -> flinkkafkaconsumer -> table.window(Tumble.over("5.minutes").select("...").where("...").writeToSink(someKafkaSink)
此外,如果有一些明确的文档描述了在这些情况下如何处理内存,我可能会忽略有人可能会有所帮助。
谢谢
为组窗口聚合存储的数据量取决于聚合的类型。许多聚合函数,例如COUNT、SUM和MIN/MAX可以进行预聚合,即它们只需要为每个窗口存储一个值。其他聚合函数(例如MEDIAN某些用户定义的聚合函数)需要存储所有值,然后才能计算其结果。
聚合需要存储的数据存储在状态后端中。根据状态后端的选择,数据可能存储在 JVM 堆的内存中或 RocksDB 实例的磁盘上。
表 API 查询还通过关系优化器(基于 Apache Calcite)进行优化,以便将过滤器尽可能推向源。根据谓词,过滤器可能会在聚合之前应用。
最后,您需要在示例查询中添加和groupBy()之间的内容(请参阅文档中的示例)。window()select()
| 归档时间: |
|
| 查看次数: |
1303 次 |
| 最近记录: |