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

Apache flink Flink EventTime应用程序中的每条记录都需要时间戳吗?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在构建一个Flink流媒体系统,可以处理实时数据和历史数据。所有数据都来自同一来源,然后在中拆分为历史数据和实时数据。实时数据得到时间戳和水印,而历史数据按顺序接收。在实时流被窗口化后,两个流被联合并流入同一个处理管道 我在任何地方都找不到EventTime流媒体环境中的所有记录是否需要加时间戳,或者Flink是否可以同时处理实时数据和历史数据的混合。这是一个可行的方法,还是会造成我经验不足而看不到的问题?对数据顺序有什么影响 我们有这样的设置,允许我们做部分回填。每个流都由一个id设置密钥

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

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

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

这是作业图:

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

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

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

  • 您可以继续在历史流上分配时间戳,并编写一个始终返回watermark.MAX\u watermark的自定义定期水印生成器。这将有效地禁用历史流的水印在连接到实时流时对水印的任何影响
  • 或者,您可以将回填操作解耦,并在另一个应用程序中执行该操作(通过在两个作业之间放置某种队列,如Kafka或Kinesis)

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

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

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

  • 您可以继续在历史流上分配时间戳,并编写一个始终返回watermark.MAX\u watermark的自定义定期水印生成器。这将有效地禁用历史流的水印在连接到实时流时对水印的任何影响
  • 或者,您可以将回填操作解耦,并在另一个应用程序中执行该操作(通过在两个作业之间放置某种队列,如Kafka或Kinesis)

  • 谢谢你的回答,大卫。不幸的是,我们需要能够使用数据子集动态地进行部分回填。我们不需要对连接的流执行任何基于事件时间的操作,但是使用一个带有自定义触发器的全局窗口-这是一个问题吗?此外,历史项目上有时间戳,我们只是没有分配时间戳,因为我们不想干扰全局水印-它不应该干扰吗?再次感谢你!我不完全理解您的要求,但我已经更新了答案。:)对不起,刚接触Flink,仍在学习如何描述需求和问题!谢谢你的更新!谢谢你的回答,大卫。不幸的是,我们需要能够使用数据子集动态地进行部分回填。我们不需要对连接的流执行任何基于事件时间的操作,但是使用一个带有自定义触发器的全局窗口-这是一个问题吗?此外,历史项目上有时间戳,我们只是没有分配时间戳,因为我们不想干扰全局水印-它不应该干扰吗?再次感谢你!我不完全理解您的要求,但我已经更新了答案。:)对不起,刚接触Flink,仍在学习如何描述需求和问题!谢谢你的更新!