Apache Flink:如何将自定义逻辑应用于最新事件?

时间:2019-02-20 04:08:47

标签: streaming apache-flink flink-streaming

尽管Flink有一些内置工具可以处理最新数据,例如 allowed late ,但我还是想自己处理最新数据。例如,我想监视延迟事件或仅将它们保存到数据库中。

我该怎么做?

2 个答案:

答案 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(ProcessFunctionKeyedProcessFunction等)可通过TimerService对象访问记录的事件时间戳和ContextTimerService可以访问当前的水印。

您可以通过比较事件时间戳和水印来标识较晚的记录。如果时间戳小于或等于水印,则说明事件已延迟。

由您决定如何处理迟到的事件。您可以对其进行标记,也可以将其丢弃,通过侧面输出将其发出,或者对它们进行任何类型的计算。