Apache Flink,什么是事件流中的延迟服务?

时间:2016-05-26 15:14:51

标签: apache-flink

我在Flink上阅读了一些文章,在阅读Flink的博客时,我发现了这个短语   "服务延迟最多60秒(事件最多1分钟内出现故障)"

定义用于该技术的无序事件持续时间"水印"在Flink,如果没有,那么内部目的是什么?

1 个答案:

答案 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);
}
}