Streaming ApacheFlink:如何将自定义逻辑应用于后期事件?
尽管Flink有一些内置的工具来处理延迟数据,比如允许延迟,但我还是希望自己来处理延迟数据。例如,我希望监视延迟事件或将它们保存到数据库中Streaming ApacheFlink:如何将自定义逻辑应用于后期事件?,streaming,apache-flink,flink-streaming,Streaming,Apache Flink,Flink Streaming,尽管Flink有一些内置的工具来处理延迟数据,比如允许延迟,但我还是希望自己来处理延迟数据。例如,我希望监视延迟事件或将它们保存到数据库中 我该怎么做呢?通常在窗口操作符中使用延迟和水印。如果您使用的是window操作符,您可以像这样使用sideoutput: val windowStream = eventStream.keyBy(output => output.rule) .window(TumblingEventTimeWindows.of(Time.of(5, TimeUni
我该怎么做呢?通常在窗口操作符中使用延迟和水印。如果您使用的是window操作符,您可以像这样使用sideoutput:
val windowStream = eventStream.keyBy(output => output.rule)
.window(TumblingEventTimeWindows.of(Time.of(5, TimeUnit.MINUTES)))
.sideOutputLateData(lateOutputTag)
并从sideoutput中获取如下最新元素:
windowStream.getSideOutput(lateOutputTag).print()
ProcessFunction(ProcessFunction
,KeyedProcessFunction
等)通过上下文
对象提供对记录的事件时间戳和TimerService
的访问。TimerService
提供对当前水印的访问
您可以通过比较事件时间戳和水印来识别延迟记录。如果时间戳小于或等于水印,则事件延迟
如何处理迟到的事件取决于你自己。您可以标记它们,也可以丢弃它们,通过侧面输出发射它们,或者使用它们执行任何类型的计算。感谢您的帮助!我试图通过“ctx.timerService().currentWatermark()”获取水印,但它始终返回-9223372036854775808,我是否遗漏了任何内容?是否启用了事件时间处理,是否分配了水印?