首页 > 解决方案 > Apache Flink - 如何在启动时跳过除最近窗口之外的所有窗口

问题描述

在 Flink 中,我有一个带有键控事件流的作业(例如:每个键平均每天有 10 个事件)。它们根据事件时间作为滑动窗口处理(例如:90 天窗口大小和 1 天窗口幻灯片)。事件从 Kafka 消费,它保留所有事件历史(例如:过去 3 年)。

有时我想重新启动 Flink:进行维护、错误处理等。或者使用已经包含事件历史的 Kafka 启动一个新的 Flink 实例。

在这种情况下,我想跳过每个键的最新窗口之外的所有触发。(它特定于我的用例:每个窗口在处理时会有效地覆盖以前窗口的处理结果。所以在启动时,我只想为每个键处理一个最近的窗口。)

在 Flink 中可以吗?如果是这样,那该怎么做?

标签: apache-flink

解决方案


您可以使用

FlinkKafkaConsumer<T> myConsumer = new FlinkKafkaConsumer<>(...);
myConsumer.setStartFromTimestamp(...); // start from specified epoch timestamp (milliseconds)

这与Kafka Consumers Start Position Configuration文档部分中的其他相关功能一起进行了描述。

或者您可以使用保存点进行干净的升级/重新部署,而不会丢失您的 kafka 偏移量和相关的窗口内容。


推荐阅读