1.自定义周期水印
public class MyWaterMark implements AssignerWithPeriodicWatermarks<MyEvent> {
private final long maxTimeLag = 3000; // 3 seconds
@Override
public long extractTimestamp(MyEvent element, long previousElementTimestamp) {
return element.getCreationTime();
}
@Override
public Watermark getCurrentWatermark() {
// return the watermark as current time minus the maximum time lag
return new Watermark(System.currentTimeMillis() - maxTimeLag);
}
}
2.使用自定义水印
val env = StreamExecutionEnvironment.getExecutionEnvironment
//便于测试,并行度设置为1
env.setParallelism(1)
//env.getConfig.setAutoWatermarkInterval(9000)
//设置为事件时间
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
//设置source 本地socket
val text: DataStream[String] = env.socketTextStream("localhost", 9000)
val lateText = new OutputTag[(String, String, Long, Long)]("late_data")
val value = text.fi

本文介绍了如何在 Apache Flink 中实现自定义周期性水印策略,以处理延迟数据。通过创建一个实现了 `AssignerWithPeriodicWatermarks` 的类并设置最大时间滞后,确保了水印的正确生成。示例代码展示了如何在数据流处理中应用这个自定义水印,包括设置事件时间、过滤、映射、窗口操作以及输出侧输出的延迟数据。这有助于理解Flink中事件时间和水印的概念及其在实时流处理中的应用。
最低0.47元/天 解锁文章
1837

被折叠的 条评论
为什么被折叠?



