Flink中数据流的本地聚合

时间:2017-10-24 12:07:05

标签: apache-flink flink-streaming

我正在尝试找到一种在本地为Flink应用程序组合Flink键控WindowedStream的好方法。这个想法类似于MapReduce中的组合器:在将数据(仍然是键控的WindowedStream)发送到全局聚合器(或reducer)之前,在每个分区(或映射器)中组合部分结果。我找到的最接近的函数是:aggregate但是我无法在WindowedStream上找到一个很好的例子。

看起来聚合不允许WindowedStream输出。有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

在Flink中,有一些计划可以提供预聚合。您必须实现自己的运算符。在流环境中,您必须扩展类AbstractStreamOperator。 KurtYoung实现了BundleOperator。您还可以在流API的顶部使用Table API。 Table API已经提供了local aggregation。我也有一个自己实现的pre-aggregate operator的示例。通常,所有这些解决方案的缺点是您必须将项目数设置为预汇总,或者将超时设置为预汇总。如果没有它,则可能会耗尽内存,或者永远不会随机播放项目(如果未达到项目的阈值数量)。换句话说,它们是基于规则的。我想拥有的是基于成本的,更具活力的东西。我想要一些可以在运行时调整这些参数的东西。

我希望这些链接可以为您提供帮助。而且,如果您有基于成本的解决方案的想法,请与我交谈=)。