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

Flink EventTime应用程序中的每条记录都需要时间戳吗?

夏博
2023-03-14

我正在构建一个Flink流媒体系统,可以处理实时数据和历史数据。所有数据都来自同一来源,然后将其拆分为历史数据和实时数据。实时数据得到时间戳和水印,而历史数据则按顺序接收。活动流打开窗口后,两个流将联合并流入同一个处理管道。

如果EventTime流媒体环境中的所有记录都需要加时间戳,或者Flink是否可以同时处理实时数据和历史数据的混合,我在任何地方都找不到。这是一种可行的方法,还是会造成我经验不足而看不到的问题?这将对数据的顺序产生什么影响?

我们有这样的设置,允许我们进行部分回填。每个流都由一个id设置密钥,我们发送历史数据来替换一个id的观察数据,同时不影响其他id的实时处理。

共有1个答案

司知
2023-03-14

一般来说,最好的方法是在每个事件上都有适当的事件时间戳,并在任何地方使用事件时间。这样做的好处是能够对实时数据和历史数据使用完全相同的代码,这在需要重新处理历史数据以修复错误或升级管道时非常有用。考虑到这一点,通常可以通过简单地运行应用程序的第二个副本来进行回填—一个正在处理历史数据而不是实时数据的副本。

至于在同一个应用程序中混合使用历史数据和实时数据,以及是否需要为历史事件设置时间戳和水印,这取决于细节。例如,如果要连接两个流,历史流上的水印(或缺少水印)将阻止连接流上的水印。如果您尝试在连接的流上使用事件时间计时器(或依赖计时器的窗口),这将很重要。

我认为你不会遇到问题,但如果你遇到了,有几个想法:

  1. 您可以继续在历史流上分配时间戳,并编写一个始终返回水印的自定义定期水印生成器。MAX\u水印。这将有效地禁用历史流的水印在连接到实时流时对水印的任何影响
 类似资料:
  • 问题内容: 我要道歉,这是我对的第一个问题… 我正在尝试查询记录表,其中每一行都有VehicleID,纬度,经度,时间戳和其他各个字段。我需要为每个VehicleID只提取最新的经度和纬度。 编辑:删除了唯一ID一词,因为我显然使用不正确。 问题答案: 如果唯一ID确实是唯一的,那么您将始终具有最新的纬度和经度,因为该ID将随着每一行记录而变化。 如果唯一ID是外键(或引用其他表中唯一ID的ID)

  • 问题内容: 每个Java程序都要求至少存在一个类。 以上说法总是正确的吗? 问题答案: 是的,您至少需要一个类才能拥有一个程序,但是 不需要 ,您不需要任何方法(与其他答案相反)。 需要一个类的原因是因为在Java中,所有代码都在类内部。因此,要获取任何代码,您需要一个类。但是,代码不一定需要包含在方法中。它也可以在初始化器中。因此,这是一个没有方法的完整Java程序: 那给… 编辑:从Java

  • 问题内容: 我最近了解到oracle具有对我来说非常有用的功能-因为设计者/实现者不太在意数据历史记录- 我可以查询记录的历史状态(如果它在oracle缓存中仍然可用),如下所示: 但是现在我需要检查范围内的历史数据。使用缓存是否有可能? 问题答案: 是的,像这样: 请注意,您可以走多远受UNDO_RETENTION参数的限制,通常为几小时而不是几天。

  • 问题内容: 我需要以Java格式获取当前时间戳, 例如: 我也需要它是线程安全的。 我可以利用这样的东西吗? 或此处链接中讨论的示例。 问题答案: 如果仅在与使用它相同的方法块中创建它,则threadunsafety 不会成为问题。换句话说,您 不会 将其分配为类的静态变量或实例变量,而不会在可被多个线程调用的一个或多个方法中重用它。只有这样,才会暴露线程的安全性。但是,您可以安全地重用同一方法块

  • 我正在使用FluentD(v.12最后一个稳定版本)向Kafka发送消息。但是FluentD正在使用一个旧的KafkaProducer,所以记录时间戳总是设置为-1。因此,我必须使用WallclockTimestampExtrator将记录的时间戳设置为消息到达kafka时的时间点。 是否有特定于Kafka Streams的解决方案? 我真的感兴趣的时间戳,是由Fluentd在消息中发送的: “时