我有一个奇怪的需求,我正在使用 Apache Flink 处理 Kafka 源的数据流。我想要进行有状态处理并保留窗口之间所有已处理键的全局状态。我的要求是为每个窗口的所有键提供输出,无论该键是否存在于当前窗口数据中。如何实现这一目标?我认为每个输入数据分区都会触发窗口。
SingleOutputStreamOperator<OutputPojo> output = inputDataStream
.keyBy( inputPojo-> inputPojo.getKey() )
.window(TumblingEventTimeWindows.of(Time.minutes(windowDuration)))
.sideOutputLateData(outputTag)
.process(new WindowProcess());
Flink 的窗口 API 并非旨在支持此操作,并且没有简单的方法可以实现此目的。
我将使用 KeyedProcessFunction 来实现它。幸运的是,Flink 文档中有一个示例可以帮助您完成大部分工作:https://nightlies.apache.org/flink/flink-docs-stable/docs/learn-flink/event_driven/