首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flink EventTime应用程序中的每条记录都需要时间戳吗?

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

Stack Overflow用户
提问于 2018-12-13 21:32:38
回答 1查看 345关注 0票数 0

我正在构建一个Flink流系统,它可以同时处理实时数据和历史数据。所有数据都来自同一个源,然后在split中进入历史和动态。实时数据得到时间戳和水印,而历史数据则按顺序接收.在活动流被加窗后,两个流被合并并流到相同的处理管道中。

如果EventTime流环境中的所有记录都需要时间戳,或者Flink甚至可以同时处理这种实时和历史数据,我就找不到了。这是一个可行的方法,还是会造成我经验不足而看不到的问题?数据的顺序会受到什么影响?

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

这是作业图:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 13:22:01

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

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

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

  1. 您可以继续在历史流上分配时间戳,并编写一个始终返回Watermark.MAX_WATERMARK的自定义周期性水印生成器。这将有效地禁止历史流的水印在连接到活动流时对水印产生的任何影响。
  2. 或者,您可以将回填操作解耦,并在另一个应用程序中这样做(在这两个作业之间设置某种排队,比如Kafka或Kinesis)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53770393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档