Flink或Spark用于增量数据

时间:2017-08-07 08:38:40

标签: java apache-spark batch-processing apache-flink stream-processing

我对FlinkSpark没有经验,我想将其中一个用于我的用例。我想介绍一下我的用例,希望能够深入了解是否可以用这两种方法完成,如果他们都可以做到这一点,哪一种方法效果最好。

我有一堆实体A存储在数据存储中(Mongo准确但实际上并不重要)。我有一个Java应用程序,可以加载这些实体并运行一些逻辑来生成一些数据类型E的流(要100%清除我没有{{ 1}}在任何数据集中,我需要在从数据库加载Es后用Java生成它们。

所以我有类似的东西

As

数据类型A1 -> Stream<E> A2 -> Stream<E> ... An -> Stream<E> 有点像Excel中的长行,它有一堆列。我需要收集所有E并运行某种类型的数据透视聚合,就像在Excel中一样。我可以看到如何在EsSpark中轻松完成这项工作。

现在是我无法弄清楚的部分。

想象一下,实体Flink中的一个(由用户或进程)发生了更改,这意味着A1的所有Es都需要更新。当然我可以重新加载所有A1,重新计算所有As,然后重新运行整个聚合。我想知道这里是否可能更聪明一点。

是否可以仅重新计算Es的{​​{1}}并执行最少量的处理。

对于Es,是否可以保留A1并仅在需要时更新部分内容(此处为Spark的{​​{1}})?

对于RDD,在流媒体的情况下,是否可以更新已经处理的数据点?它能处理那种情况吗?或者我可能为Es的旧A1生成否定事件(即将其从结果中删除)然后添加新事件?

这是一个常见的用例吗?这甚至是FlinkA1设计的事情吗?我会这么认为,但我再也没用过,所以我的理解非常有限。

1 个答案:

答案 0 :(得分:0)

我认为你的问题很广泛,取决于很多条件。在flink中,您可以拥有MapState<A, E>并仅更新已更改的A's的值,然后根据您的用例生成更新的E's下游或生成差异(撤消流)

在Flink中,存在可能激发您灵感的动态表撤回流的概念,或者Table API已经涵盖您的用例的事件。您可以查看文档here