flink - 在键控上折叠 windows

flink - folds on keyed windows

处理一些我想每 15 秒执行一次折叠的数据。从 'outside' 看来,window 正在保存持续时间内的所有数据,然后一次性将其提交给折叠函数。

真相?

如果是这样,有没有办法在每次提交新数据时调用 fold 函数,然后 只在 结束时返回结果 window?

是否有一些其他的转换组合可以放在一起来实现这种效果?

你的观察是正确的,是的。原因是 windowing 运算符的当前实现有些受限。从概念上讲,window 运算符中有两个元素:window 缓冲区window 函数 .假设 window 运算符的输入类型是 IN,输出类型是 OUT。现在,window 缓冲区存储 IN 类型的元素,当需要发出元素时,它会发出 IN 类型的元素。 window 函数获取元素集合 IN 作为输入并发出类型 OUT (Collection[IN] -> OUT).

的元素

如果 window 函数是一个 reduce 函数,我们可以在 window 缓冲区内进行预聚合,因为它的签名是 (IN, IN) -> IN。 window 函数基本上只从它可以发出的 window 缓冲区中获取一个元素。

如果我们想要一个高效的折叠,事情会变得稍微复杂一些,因为我们需要 window 缓冲区来获取类型 IN 的元素,但发出类型 OUT 和 window 函数看起来像这样:OUT -> OUT.

可以做到,但现在还没有实现。 (顺便说一句,我为此开了一个Jira Issue:https://issues.apache.org/jira/browse/FLINK-2991