我们计划使用Apache Flink对多种类型的对象执行实时聚合。 我们需要支持几种类型的聚合,例如总和,最大值,最小值,平均值等 - 到目前为止没什么特别的
我们的要求是将数据输出到kafka,其中一条消息包含多个对象属性的多个聚合值。
例如,消息应包括属性A的总和,最大值和平均值,以及最近10分钟属性B的总和和最小值我的问题是用Flink实现这样一个要求的最佳方法是什么?
我们虽然使用了一个自定义窗口函数,它将在窗口末端的所有对象上运行,并自行计算所有必需的值,并输出一个包含所有这些聚合值的新对象。 我们关心这个解决方案的是对内存消耗的影响,必须将所有窗口数据保存在内存中等待窗口触发(我们将同时打开许多这样的窗口)
非常感谢任何建议/意见!
由于
答案 0 :(得分:2)
最好的方法是使用增量聚合来计算每个窗口的计数,总和,最小值和最大值 - 您可以计算窗口函数的平均值,给定总和和计数。通过这种方式,您需要保留的唯一状态是这四个值(count,sum,min和max),而不是必须缓冲整个流以便在窗口结束时进行处理。
This example from the documentation应该足以让你入门。