Apache flink Flink windowAll聚合而不是window进程?

Apache flink Flink windowAll聚合而不是window进程?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我们将一些数据聚合1分钟,然后刷新到一个文件中。数据本身就像一张地图,其中键是一个对象,值也是一个对象 因为我们需要一起刷新数据,所以我们不做任何keyBy,因此使用windowAll 我们所面临的问题是,如果我们将window函数与ProcessAllWindowFunction一起使用,然后在进程调用中聚合,那么吞吐量会比使用aggregate with window函数时更好。当我们使用聚合时,我们还看到状态检查点超时 我试图浏览代码库,我能想到的唯一假设是,检查点进程将使用的ListSt

我们将一些数据聚合1分钟,然后刷新到一个文件中。数据本身就像一张地图,其中键是一个对象,值也是一个对象

因为我们需要一起刷新数据,所以我们不做任何keyBy,因此使用windowAll

我们所面临的问题是,如果我们将window函数与ProcessAllWindowFunction一起使用,然后在进程调用中聚合,那么吞吐量会比使用aggregate with window函数时更好。当我们使用聚合时,我们还看到状态检查点超时

我试图浏览代码库,我能想到的唯一假设是,检查点进程将使用的ListState与aggregate将使用的AggregateState可能更容易


这个假设正确吗?我们做错什么了吗?如果没有,是否有办法提高聚合性能?

根据您所说的,我将得出一些结论

我假设您使用的是RocksDB状态后端,并将每个传入事件聚合到某种集合中。在这种情况下,RocksDB状态后端必须对该集合进行反序列化,向其中添加新事件,然后重新序列化它——对于每个事件。这个很贵

使用
ProcessAllWindowFunction
时,每个传入事件都会附加到
ListState
对象,该对象具有非常高效的实现——新事件的序列化字节只需附加(列表不必反序列化和重新序列化)

检查点超时是因为吞吐量太低


切换到
fsstatebend
会有所帮助。或者使用
ProcessAllWindowFunction
。或者使用
KeyedProcessFunction
实现您自己的窗口,然后使用
ListState
MapState
进行聚合。

根据您所说的,我将得出一些结论

我假设您使用的是RocksDB状态后端,并将每个传入事件聚合到某种集合中。在这种情况下,RocksDB状态后端必须对该集合进行反序列化,向其中添加新事件,然后重新序列化它——对于每个事件。这个很贵

使用
ProcessAllWindowFunction
时,每个传入事件都会附加到
ListState
对象,该对象具有非常高效的实现——新事件的序列化字节只需附加(列表不必反序列化和重新序列化)

检查点超时是因为吞吐量太低

切换到
fsstatebend
会有所帮助。或者使用
ProcessAllWindowFunction
。或者使用
KeyedProcessFunction
实现您自己的窗口,然后使用
ListState
MapState
进行聚合