Flink 流处理管道,具有 1 个 kafka 分区,具有 5 个并行度,具有带 1 分钟滚动窗口的键控事件窗口。我们使用带有默认周期性生成器的升序时间戳水印。
我们有很多来自不同键控窗口的最新记录。我不完全确定这是否与 flink 没有带键控水印有关。传入的事件按时间戳顺序排列,因此我认为这与推进水印有关。
这是否与全局水印有关,即使它们在生成水印之前和分配窗口之前在kafka源中被消耗,也将记录标记为晚?换句话说,当我们有事件等待窗口分配时,水印进度可以通过提前关闭窗口来将记录标记为迟到吗?
如果您需要更多详情,请询问我。
代码
WatermarkStrategy watermarkStrategy = WatermarkStrategy.forMonotonousTimestamps()
.withTimestampAssigner(timestamp);
Datastream datastream = executionEnvironment.fromSource(kafkaSource, watermarkStrategy);
datastream.keyBy(id).window(TublingEventTimeWindows.of(Time.milliseconds(60000))
.sideOutputLateData(lateRecordsTag)
.aggregate(aggregateFunction);
我的猜测是,数据在逐个键的基础上按时间戳顺序排列,但不是全局按顺序排列的。如果是这种情况,那么您需要以不同的方式进行水印,以便它反映数据流中实际的无序情况。