Flink如何处理不适合内存的窗口和分区?

问题描述 投票:0回答:1

how Flink manages memory上读了一下之后,传递给DataSet#mapPartitionsKeyedWindowedStream#process的输入是否是一个惰性集合仍然不明显。

为窗口场景调试了一点似乎现在给出的答案是从ListState读取输入,该ArrayList映射到RocksDBStateBackend但是想知道是否总是如此(或者如果它取决于输入的大小) 。

apache-flink flink-streaming
1个回答
1
投票

批处理和流处理操作符在Flink中处理状态非常不同。链接的博客文章解释了Flink的批处理操作符(执行DataSet程序)如何管理内存。流处理运算符(由DataStream程序使用)使用可插入状态后端来存储状态。

批处理操作员使用的算法可以获得固定的内存预算,并在数据超出预算时溢出到磁盘。示例是外部合并排序或混合散列连接算法。

在流处理应用程序中,可插拔状态后端负责维护,检查点和恢复状态。有状态后端在JVM堆上存储状态。如果一个进程中的数据超过可用堆内存,则这些将失败。但是,还有一个qazxswpoi,它将状态存储在磁盘上的嵌入式RocksDB实例中。

© www.soinside.com 2019 - 2024. All rights reserved.