我正在研究一个简单的聚合,它对给定资源上发生的事件总数求和(请参阅:
Calculate totals and emit periodically in flink )。在一些帮助下,我得到了这个工作,但现在遇到了另一个问题。
我正在尝试计算资源生命周期的总数,但我正在从保留期为 24 小时的 kinesis 流中读取事件。因为这意味着我无法访问之前发生的事件,所以我需要从每天计算一次总数的遗留(批处理)系统引导我的状态。
本质上,我想以某种方式从遗留系统中引导状态(加载昨天的统计数据),然后在此基础上从 kinesis 流中加入今天的数据,并避免在此过程中出现重复。理想情况下,这将是一个一次性过程,并且应用程序应该从 kinesis 开始运行。
如果我错过了什么,我很乐意提供更多细节。
谢谢
最佳答案
我推荐的是使用 flink 的状态来做到这一点( https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/state/state.html )。您可以拥有一个 ValueState 对象来保存不断更新的资源的总值(value),或者您可以使用 ListState 来保存所有通过的值,并在新事件发生时对所有这些值进行重新计算。显然 ListState 会使用比单个主值更多的内存,但我不知道你的需求和你一样。
关于apache-flink - 引导 flink 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676073/