Apache Flink - 根据事件时间计算最后一个 window
Apache Flink - Compute the last window on event time based
我的工作做以下事情:
- 根据事件时间从 Kafka 主题中消费事件。
- 计算 7 天的 window 大小和 1 天的幻灯片。
- 将结果汇入 Redis。
我有几个问题:
- 如果它使用最新记录中的 Kafka 事件,则作业存活 1 天后,作业将关闭 window 并计算 7 天 window。问题是作业只有 1 天的数据,因此结果是错误的。
- 如果我尝试让它消费7天前时间戳的Kafka事件,当作业开始时,它会从第一天开始计算整个windows,这花了很多时间。另外,我只想要最后的 window 结果,因为这对我来说很重要。
我是不是漏掉了什么?有更好的方法吗?
Flink 将时间 windows 与纪元对齐。因此,如果您有 windows 一小时长,则它们 运行 从整点到整点。从午夜到午夜的一天 windows 运行。同样的原则适用于长达 7 天的 windows,并且由于纪元开始于星期四(1970 年 1 月 1 日),因此长达 7 天的 window 应该在周三晚上午夜关闭 /星期四早上。
如果您想将 windows 转移到不同的时间开始,您可以向 window 构造函数提供一个偏移量。
我的工作做以下事情:
- 根据事件时间从 Kafka 主题中消费事件。
- 计算 7 天的 window 大小和 1 天的幻灯片。
- 将结果汇入 Redis。
我有几个问题:
- 如果它使用最新记录中的 Kafka 事件,则作业存活 1 天后,作业将关闭 window 并计算 7 天 window。问题是作业只有 1 天的数据,因此结果是错误的。
- 如果我尝试让它消费7天前时间戳的Kafka事件,当作业开始时,它会从第一天开始计算整个windows,这花了很多时间。另外,我只想要最后的 window 结果,因为这对我来说很重要。
我是不是漏掉了什么?有更好的方法吗?
Flink 将时间 windows 与纪元对齐。因此,如果您有 windows 一小时长,则它们 运行 从整点到整点。从午夜到午夜的一天 windows 运行。同样的原则适用于长达 7 天的 windows,并且由于纪元开始于星期四(1970 年 1 月 1 日),因此长达 7 天的 window 应该在周三晚上午夜关闭 /星期四早上。
如果您想将 windows 转移到不同的时间开始,您可以向 window 构造函数提供一个偏移量。