尽管Flink有一些内置工具可以处理最新数据,例如 allowed late ,但我还是想自己处理最新数据。例如,我想监视延迟事件或仅将它们保存到数据库中。
我该怎么做?
答案 0 :(得分:0)
通常在窗口运算符中使用延迟和水印。而且,如果您使用的是窗口运算符,则可以像这样使用sideoutput:
val windowStream = eventStream.keyBy(output => output.rule)
.window(TumblingEventTimeWindows.of(Time.of(5, TimeUnit.MINUTES)))
.sideOutputLateData(lateOutputTag)
并从sideoutput中获取后期元素,如下所示:
windowStream.getSideOutput(lateOutputTag).print()
答案 1 :(得分:0)
ProcessFunctions(ProcessFunction
,KeyedProcessFunction
等)可通过TimerService
对象访问记录的事件时间戳和Context
。 TimerService
可以访问当前的水印。
您可以通过比较事件时间戳和水印来标识较晚的记录。如果时间戳小于或等于水印,则说明事件已延迟。
由您决定如何处理迟到的事件。您可以对其进行标记,也可以将其丢弃,通过侧面输出将其发出,或者对它们进行任何类型的计算。