我需要在窗口上加入两个键控流。但我需要首先减少两个流,然后在同一窗口中的聚合上应用连接。
我花了一些时间查看Flink API,发现WindowedStream中存在这样的apply函数
public SingleOutputStreamOperator apply(ReduceFunction reduceFunction,WindowFunction function)
但是我无法在JoinedStream中找到类似的功能。 题: 这对Flink来说是一个有用的增强吗? 有没有我现在可以使用的解决方法。
答案 0 :(得分:1)
如果使用处理时语义,则可以单独将窗口聚合应用于每个输入流,并将结果提供给连接(当然,聚合和连接都必须使用相同的窗口定义)。 / p>
这样的事情:
WindowAssigner w = ...
reducedStream1 = stream1.keyBy(...).window(w).apply(...);
reducedStream2 = stream2.keyBy(...).window(w).apply(...);
reducedStream1.join(reducedStream2)
.where(...).equalTo(...)
.window(w).apply(...);
对于处理时间,您需要使用以下命令编写自己的自定义运算符:
stream1.coGroup(stream2)
.where(...).equalTo(...)
.window(...).apply(CoGroupFnction);