我在Flink上阅读了一些文章,在阅读Flink的博客时,我发现了这个短语 "服务延迟最多60秒(事件最多1分钟内出现故障)"
定义用于该技术的无序事件持续时间"水印"在Flink,如果没有,那么内部目的是什么?
答案 0 :(得分:1)
我将尝试简要说明如何管理Flink中的无序事件。事件时间,乱序和水印都是非常接近的概念,我想你在理解了它们的关系之后会更好地理解这个短语。
水印和乱序是基于事件时间的DataStreams的概念。水印可以描述为时间标记,您可以假设在标记之前不会发生更多事件。在Flink中有几种发出水印的机制,即每次收到事件时都可以设置水印。此外,时间窗口使用水印来检查何时是评估的正确时间。
那就是"水印"和"乱序"概念本质上是相同的,因为您使用水印来实现无序管理。在您的情况下,要定义60秒的最大延迟,就像在收到最大时间戳之前60秒设置水印一样简单。
官方网站上有一个关于管理无序事件的好例子:
/**
* This generator generates watermarks assuming that elements come out of order to a certain degree only.
* The latest elements for a certain timestamp t will arrive at most n milliseconds after the earliest
* elements for timestamp t.
*/
public class BoundedOutOfOrdernessGenerator extends AssignerWithPeriodicWatermarks<MyEvent> {
private final long maxOutOfOrderness = 3500; // 3.5 seconds
private long currentMaxTimestamp;
@Override
public long extractTimestamp(MyEvent element, long previousElementTimestamp) {
long timestamp = element.getCreationTime();
currentMaxTimestamp = Math.max(timestamp, currentMaxTimestamp);
return timestamp;
}
@Override
public Watermark getCurrentWatermark() {
// return the watermark as current highest timestamp minus the out-of-orderness bound
return new Watermark(currentMaxTimestamp - maxOutOfOrderness);
}
}