Apache flink 使用Flink streaming中最近1小时、1周和1个月的数据处理事件

Apache flink 使用Flink streaming中最近1小时、1周和1个月的数据处理事件,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我必须用最近1小时、1周和1个月的数据处理每个事件。例如,在过去1个月内,与该事件对应的相同ip发生了多少次 我认为窗口是固定时间,我不能用当前事件对应的最后1小时来计算 如果您有任何线索,请指导我应该使用什么表格、ProcessFunction或全局窗口。或者我应该采取什么方法?Flink不支持开箱即用的这种窗口有一个原因,这与保持必要状态的内存需求有关。以正常方式计算每小时的事件数(即10:00到11:00之间的一小时数)只需要保留一个从零开始并随每个事件递增的计数器。计时器在一小时结束时触

我必须用最近1小时、1周和1个月的数据处理每个事件。例如,在过去1个月内,与该事件对应的相同ip发生了多少次

我认为窗口是固定时间,我不能用当前事件对应的最后1小时来计算


如果您有任何线索,请指导我应该使用什么表格、ProcessFunction或全局窗口。或者我应该采取什么方法?

Flink不支持开箱即用的这种窗口有一个原因,这与保持必要状态的内存需求有关。以正常方式计算每小时的事件数(即10:00到11:00之间的一小时数)只需要保留一个从零开始并随每个事件递增的计数器。计时器在一小时结束时触发,计数器可以发出

在每一时刻提供前60分钟内的事件计数将要求窗口操作员在内存中保留每个事件的时间戳,并在每次发出结果时进行大量计数

如果您真的打算这样做,我建议您确定需要多久提供一次更新的结果。例如,对于每分钟更新一次,您可以只存储每分钟的计数,而不是每个事件

这有帮助,但情况仍然相当糟糕。例如,您可能会尝试使用滑动窗口,该窗口每分钟提供上个月的事件计数。但这也会很痛苦,因为您将实例化60*24*30=43200个窗口对象,所有这些对象都是并行计算的


Flink API中的相关构建块包括,这是在windows中执行此操作的一个有趣的替代方法,以及自定义和如果您决定坚持使用windows。请注意,也可以查询Flink中保存的状态,而不是按计划发出它——请参阅。

谢谢,我也会尝试。