当前位置: 首页 > 知识库问答 >
问题:

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

卢作人
2023-03-14

我读过几篇关于Flink的文章,在读Flink的博客时,我遇到了这样一句话:“最多延迟60秒(事件最多延迟1分钟)”

是否在Flink中定义乱序事件持续时间用于技术“水印”,如果不是,那么内部目的是什么?

共有1个答案

子车俊材
2023-03-14

我将简要解释如何在Flink中管理无序事件。事件时间、无序和水印是非常接近的概念,我想在了解它们之间的关系后,您会更好地理解这个短语。

水印和超出范围是基于事件时间的数据流的概念。水印可以描述为一个时间标记,您假设在标记之前不会发生更多事件。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);
}
}
 类似资料:
  • 我试图开发以下代码,但它不起作用。我想使用apache Flink来延迟时间(在时间戳字段中指定的)与当前日期不同的事件。 样品: > 当前日期:2022-05-06 10:30 事件1[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-05-06 10:30”}-- 事件2[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-

  • 问题内容: 什么是Java的延迟加载?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设您有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着它在加载父级时实际上并不会加载所有子级。而是在要求时加载它们。您可以显式地请求此请求,或者,更常见的是,当您尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通常您不

  • 问题内容: Java中的延迟加载是什么?我不明白这个过程。有人可以帮助我了解延迟加载的过程吗? 问题答案: 假设你有一个父母,而那个父母有很多孩子。Hibernate现在可以“延迟加载”子级,这意味着在加载父级时,它实际上并未加载所有子级。而是在要求时加载它们。你可以显式地请求此请求,也可以是更常见的情况,当你尝试访问孩子时,hibernate会自动加载它们。 延迟加载可以帮助显着提高性能,因为通

  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :

  • 我试图理解延迟和延迟订阅操作符之间的区别。 本文件描述了延迟操作员: 延迟操作符通过在发出每个源可观察项之前暂停特定的时间增量(您指定)来修改其源可观察项。这会将可观测项发出的整个项目序列在时间上向前移动指定的增量 delaySubscription是这样描述的: 还有一个操作符,您可以使用它延迟对源可观察对象的订阅:delaySubscription。 然而,当我测试这两个操作员的行为时,我觉得

  • 1、mybatis 是否支持延迟加载? 延迟加载其实就是讲数据加载时机推迟,比如推迟嵌套查询的时机。 延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。 mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection是一对多查询,在mybatis配置文件中可以配置lazylo