Apache Flink - 如何在启动时跳过除最新窗口之外的所有窗口



在 Flink 中,我有一个包含事件键控流的作业(例如:平均每天每个键有 10 个事件(。它们作为基于事件时间的滑动窗口进行处理(例如:90 天的窗口大小和 1 天的窗口幻灯片(。事件从 Kafka 使用,它保留所有事件历史记录(例如:过去 3 年(。

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

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

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

您可以使用

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

它与其他相关函数一起在 Kafka 消费者起始位置配置的文档部分中进行了描述。

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

相关内容

  • 没有找到相关文章

最新更新