使用flink流媒体中最近1小时、1周和1个月的数据处理事件

xvw2m8pv  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(507)

我必须用过去1小时、1周和1个月的数据处理每个事件。例如,在过去1个月内,同一ip发生了多少次,对应于该事件。
我认为窗口是固定的时间,我不能用当前事件对应的最后1小时来计算。
如果您有任何线索,请指导我应该使用什么表,processfunction或全局窗口。或者我应该采取什么方法?

7eumitmz

7eumitmz1#

flink不支持这种开箱即用的窗口是有原因的,这与保持必要状态的内存需求有关。以通常的方式计算每小时的事件数(即10:00到11:00的一小时),只需要保留一个从零开始并随每个事件递增的计数器。一个计时器在一小时结束时启动,计数器可以发出。
在每个时刻提供前60分钟内的事件计数将要求窗口操作符在内存中保留每个事件的时间戳,并在每次发出结果时进行大量计数。
如果您真的打算这样做,我建议您确定多久需要提供更新的结果。例如,对于每分钟更新一次,您可以只存储每分钟的计数,而不是存储每个事件。
这有帮助,但情况仍然很糟糕。例如,您可能会尝试使用滑动窗口,该窗口每分钟提供过去一个月的事件计数。但是这也会很痛苦,因为你会示例化602430=43200个窗口对象,所有这些都是并行的。
flinkapi中的相关构建块是processfunction,这是一个有趣的替代windows的方法,如果您决定继续使用windows,则可以使用自定义触发器和逐出器。注意,也可以查询flink中保存的状态,而不是按计划发出它——请参阅queryable state。

相关问题