我正在构建一个Flink流系统,它可以同时处理实时数据和历史数据。所有数据都来自同一个源,然后在split中进入历史和动态。实时数据得到时间戳和水印,而历史数据则按顺序接收.在活动流被加窗后,两个流被合并并流到相同的处理管道中。
如果EventTime流环境中的所有记录都需要时间戳,或者Flink甚至可以同时处理这种实时和历史数据,我就找不到了。这是一个可行的方法,还是会造成我经验不足而看不到的问题?数据的顺序会受到什么影响?
我们有这样的设置,允许我们进行部分回填。每个流都是由一个id键决定的,我们发送历史数据来替换一个id的观测数据,同时不影响其他id的实时处理。
这是作业图:

发布于 2018-12-14 13:22:01
一般来说,最好的方法是在每个事件上都有适当的事件时间戳,并在任何地方使用事件时间。它的优点是能够对实时数据和历史数据使用完全相同的代码--当需要重新处理历史数据以修复bug或升级管道时,这是非常有价值的。考虑到这一点,通常可以通过运行应用程序的第二个副本来完成回填--一个处理历史数据而不是实时数据的应用程序。
至于在同一应用程序中使用历史数据和实时数据的组合,以及是否需要为历史事件设置时间戳和水印--这取决于细节。例如,如果要连接这两个流,历史流上的水印(或缺少水印)将阻止连接流上的水印。如果您尝试在连接的流上使用事件时计时器(或依赖于计时器的窗口),这将非常重要。
我不认为你会遇到问题,但如果你遇到了问题,有几个想法:
https://stackoverflow.com/questions/53770393
复制相似问题