在 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 偏移量和关联的窗口内容。