首页 > 解决方案 > Apache Flink - 基于事件时间计算最后一个窗口

问题描述

我的工作做以下事情:

  1. 根据事件时间使用来自 Kafka 主题的事件。
  2. 计算 7 天的窗口大小和 1 天的幻灯片。
  3. 将结果发送到 Redis。

我有几个问题:

  1. 如果它使用最新记录中的 Kafka 事件,则作业在 1 天后处于活动状态,作业将关闭窗口并计算 7 天窗口。问题是该作业只有 1 天的数据,因此结果是错误的。
  2. 如果我试图让它从 7 天前的时间戳中消耗 Kafka 事件,那么随着工作的开始,它会从第一天开始计算整个窗口,并且花费了很多时间。另外,我只想要最后一个窗口结果,因为这对我来说很重要。

我错过了什么吗?有没有更好的方法来做到这一点?

标签: apache-flinkstream-processing

解决方案


Flink 将时间窗口与 epoch 对齐。因此,如果您有一个一小时长的窗口,它们会从整点开始运行到整点。整天的窗口从午夜运行到午夜。同样的原则适用于 7 天长的窗口,并且由于纪元从星期四(1970 年 1 月 1 日)开始,7 天长的窗口应该在周三晚上/周四早上的午夜关闭。

如果您想将窗口移动到不同的时间开始,您可以为窗口构造函数提供偏移量。


推荐阅读