我们计划使用Apache Flink在多种类型的对象上执行实时聚合。我们需要支持几种类型的聚合,例如总和,最大,最小,平均等。-到目前为止,没有什么特别的
我们的要求是将数据输出到Kafka,其中一条消息包含多个对象属性的多个汇总值。
例如,该消息应包括属性A的总和,最大值和平均值,以及属性B的总和和最小值B的属性B和最小值B
我的问题是,通过Flink实施此类要求的最佳方法是什么?
我们虽然使用一个自定义窗口函数,该函数将在窗口末端的所有对象上运行,并按照所有必需的值进行计算,并输出一个拥有所有这些汇总值的新对象。我们对此解决方案所关注的是对内存消耗的影响,必须将所有窗口数据保存在内存中等待窗口发射(我们将同时打开许多此类窗口(
任何建议/评论都非常感谢!
谢谢
最好的方法是使用增量聚合来计算每个窗口的计数,总和,最小和最大 - 您可以计算窗口函数中的平均值,给定总和并计数。这样,您需要保留的唯一状态是这四个值(计数,总和,最小和最大(,而不必在窗口末端缓冲整个流进行处理。
文档中的示例应该足以让您开始。