减少并加入 window

Reduce and join on window

我需要在 window 上加入两个键控流。但我需要先减少两个流,然后在同一 window.

内对聚合应用连接

我花了一些时间查看 Flink API,发现 WindowedStream 中存在这样的应用函数

public SingleOutputStreamOperator apply(ReduceFunction reduceFunction, WindowFunction 函数)

但我无法在 JoinedStream 中找到类似的功能。 题: 这会是对 Flink 的有用增强吗? 有没有我现在可以使用的解决方法。

如果您使用处理时间语义,您可以将 window-聚合独立应用于每个输入流并将结果提供给连接(当然,聚合和连接都必须使用相同 window 定义)。

像这样:

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);