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

时间:2019-06-05 07:04:31

标签: apache-flink

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

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

在这种情况下,除了每个键的最新窗口,我想跳过所有触发。 (这是针对我的用例的:每个窗口在处理后都会有效地覆盖以前窗口的处理结果。因此,在启动时,我只想为每个Key处理一个最近的窗口。)

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

1 个答案:

答案 0 :(得分:1)

您可以使用

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

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

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