4

我正在研究一个简单的聚合,它将给定资源上发生的事件总数相加(请参阅: 计算总数并在 flink 中定期发出)。在一些帮助下,我得到了这个工作,但现在遇到了另一个问题。

我正在尝试计算资源生命周期的总数,但我正在从保留期为 24 小时的 kinesis 流中读取事件。由于这意味着我无法访问在此之前发生的事件,因此我需要从一个每天计算一次总数的遗留(批处理)系统引导我的状态。

本质上,我想以某种方式从遗留系统引导状态(加载昨天的统计信息),然后在此基础上加入来自 kinesis 流的今天数据,并避免在此过程中重复。理想情况下,这将是一个一次性的过程,并且应用程序应该从那时起从 kinesis 运行。

如果我错过了什么,我很乐意提供更多细节。

谢谢

4

2 回答 2

0

我建议使用 flink 的状态来执行此操作(https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/state/state.html)。您可以拥有一个 ValueState 对象来保存不断更新的资源的总价值,或者您可以使用 ListState 来保存所有通过的值,并且每当有新事件通过时对所有这些值进行重新计算。显然 ListState 会使用比单个主值更多的内存,但我不知道您的需求是什么。

于 2018-04-09T16:24:27.910 回答
0

我面临着类似的问题。我目前的解决方案是有两个来源——一个用于历史数据,一个用于当前数据。然后我会将源与 CoFlatmap 函数结合起来。这个函数必须跟踪传入的记录,缓冲它们并以正确的顺序输出它们。不幸的是,这种方法需要一些工作。

于 2018-05-02T07:09:12.753 回答