Java 在Flink中使用相同的滑动窗口连接2个以上的流

Java 在Flink中使用相同的滑动窗口连接2个以上的流,java,apache-flink,flink-streaming,Java,Apache Flink,Flink Streaming,我有3个流A,B和C,我应该加入到一个流中,让我们称之为ABC,并对其进行一些操作 重要的是,我使用大小为X和Y的滑动窗口,其中Y我认为在这种情况下,将使用两个滑动窗口连接——一个用于计算AB,还有一种方法是用C连接这些结果。您可能遇到的一个问题是第一次连接生成的记录上的时间戳——我不确定Flink将在包装AB事件的StreamRecords中添加什么时间戳,但是对于正常(非连接)窗口,Flink将结果记录上的时间戳设置为窗口结束时间。在这种情况下,这可能不是您想要的。如果这是一个问题,您可以在

我有3个流A,B和C,我应该加入到一个流中,让我们称之为ABC,并对其进行一些操作


重要的是,我使用大小为X和Y的滑动窗口,其中Y我认为在这种情况下,将使用两个滑动窗口连接——一个用于计算AB,还有一种方法是用C连接这些结果。您可能遇到的一个问题是第一次连接生成的记录上的时间戳——我不确定Flink将在包装AB事件的StreamRecords中添加什么时间戳,但是对于正常(非连接)窗口,Flink将结果记录上的时间戳设置为窗口结束时间。在这种情况下,这可能不是您想要的。如果这是一个问题,您可以在第一个滑动窗口之后放置一个额外的时间戳赋值器,以便在第二次连接(使用C)之前适当地设置时间戳。

我不理解您的场景。假设X=60,Y=20。流A在时间0处具有消息,流B在时间61处具有消息。61不小于20,并且没有包含这两条消息的窗口。让X+1小于Y意味着X小于Y,这是一种使用滑动窗口的奇怪方式。@DavidAnderson你是对的,我在文本中混合了X和Y。假设X=15,Y=5。如果A在时间0处有一条消息,B在时间6处有一条消息,则它们应该是同一滑动窗口的一部分,只是在不同的间隔处,这应该可以工作,尽管您可能需要在翻滚连接窗口之后再次分配时间戳和水印。但是,如果不应用窗口功能,我一次不能连接2个以上的流。例如,如果我不能做A.join(B).where(..).equalTo(..).join(C).where(..).equalTo(..).window(SlidingEventWindow),我必须做:A.join(B).where(..).equalTo(..).window(..).apply(..).join(C)…where(..).equalTo(..).window apply(…);因此,如果我希望输出是3个流的滑动窗口,我应该首先应用滑动窗口(X,Y),然后应用滚动窗口(X)?@DavidAnderson您能提供一个示例,说明如何在同一窗口中连接3个流吗?