我有3个流a,b和c,我应该加入到一个单一的流让我们称之为和做一些操作。
重要的是,我使用尺寸为x和y的滑动窗口,其中y<=x*3
所有流都包含一些我用于连接的公共id,x,y是以秒为单位定义的时间参数。
我当前的实现是使用大小为x的滚动窗口将流a和b连接到ab中,然后使用大小为x和y的滑动窗口将ab和c连接起来。
在诸如流a在时间0接收消息,流b在时间y+1接收消息的情况下,这可能导致错误的回答。在这种情况下,由于y+1<x,两条消息应该进入同一个滑动窗口,但最终结果是,当我加入ab和c时,由于初始滚动窗口,来自b的消息丢失。
我可以在flink中使用一个滑动窗口进行多流连接吗?就像我在spark中连接多个Dataframe一样?
1条答案
按热度按时间klh5stk11#
我认为在这种情况下有效的方法是使用两个滑动窗口连接——一个计算ab,另一个用c连接这些结果。您可能遇到的一个问题是第一次连接生成的记录上的时间戳——我不确定flink将把什么时间戳放入 Package ab事件的streamrecords中,但是对于正常(非连接)窗口,flink将结果记录上的时间戳设置为窗口结束时间。在这种情况下,这可能不是你想要的。如果这是一个问题,您可以在第一个滑动窗口之后放置一个额外的时间戳赋值器,以便在第二个连接之前(使用c)适当地设置时间戳。