Apache flink 减少并连接到窗口上

Apache flink 减少并连接到窗口上,apache-flink,Apache Flink,我需要在一个窗口上连接两个键控流。但是我需要首先减少这两个流,然后在同一个窗口内对聚合应用连接 我花了一些时间研究Flink API,发现WindowedStream中存在这样一个应用函数 公共SingleOutputStreamOperator应用(ReduceFunction ReduceFunction、WindowFunction) 但我无法在JoinedStream中找到类似的函数。 问题: 这对Flink来说是一个有用的增强。 现在是否有一种解决方法可以使用。如果您使用的是处理时语义

我需要在一个窗口上连接两个键控流。但是我需要首先减少这两个流,然后在同一个窗口内对聚合应用连接

我花了一些时间研究Flink API,发现WindowedStream中存在这样一个应用函数

公共SingleOutputStreamOperator应用(ReduceFunction ReduceFunction、WindowFunction)

但我无法在JoinedStream中找到类似的函数。 问题: 这对Flink来说是一个有用的增强。
现在是否有一种解决方法可以使用。

如果您使用的是处理时语义,您可以将窗口聚合单独应用于每个输入流,并将结果馈送到联接中(当然,聚合和联接必须使用相同的窗口定义)

大概是这样的:

WindowAssigner w=。。。
reducedStream1=stream1.keyBy(…).window(w).apply(…);
reducedStream2=stream2.keyBy(…).window(w).apply(…);
reducedStream1.连接(reducedStream2)
.where(…).equalTo(…)
。窗口(w)。应用(…);
对于处理时间,您需要使用以下命令编写自己的自定义运算符:

stream1.coGroup(stream2)
.where(…).equalTo(…)
.window(…).apply(CoGroupFnction);

我正在使用事件时间,我最终使用coGroup实现了它,正如您所建议的那样。谢谢