0

我没有使用Flinkor的经验Spark,我想将其中一个用于我的用例。我想介绍我的用例,并希望了解这是否可以用其中任何一个来完成,如果他们都可以做到,那么哪一个效果最好。

我有一堆实体A存储在数据存储中(准确地说是 Mongo,但这并不重要)。我有一个 Java 应用程序,它可以加载这些实体并在它们上运行一些逻辑以生成某种数据类型的 Stream E(100% 清楚我没有Es任何数据集中,我需要在我之后用 Java 生成它们As从数据库加载)

所以我有这样的东西

A1 -> Stream<E>
A2 -> Stream<E>
...
An -> Stream<E>

数据类型E有点像 Excel 中的长行,它有一堆列。我需要Es像在 Excel 中那样收集所有数据并运行某种数据透视聚合。我可以看到我如何在Spark或中轻松做到这一点Flink

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

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

是否有可能只重新计算EsforA1并进行最少的处理。

因为Spark是否有可能在RDD需要时保留并仅更新其中的一部分(这里是Esfor A1)?

对于Flink,在流式传输的情况下,是否可以更新已经处理的数据点?能处理这种情况吗?或者我是否可以为's old生成负面事件(即从结果中删除它们)然后添加新事件?A1Es

这是一个常见的用例吗?这甚至是FlinkSpark旨在做的事情吗?我会这么认为,但我也没有使用过,所以我的理解非常有限。

4

1 回答 1

0

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

在 Flink 中存在动态表回收流的概念,它们可能会激发您的灵感,或者可能表 API 已经涵盖了您的用例。你可以在这里查看文档

于 2017-08-07T09:30:30.840 回答