0

我对FlinkSpark没有任何经验,并且我想将其中的一个用于我的用例。我想介绍一下我的使用案例,希望能够了解一下这两者是否可以完成,如果他们都可以这样做,哪一个最好。用于增量数据的Flink或Spark

我有一堆存储在数据存储中的实体A(Mongo是精确的,但确实没关系)。我有一个Java应用程序,可以加载这些实体和运行一些逻辑他们生成一些数据类型的流E(要100%清除我没有Es在任何数据集中,我需要生成它们在Java中后,我加载从DB的As

所以我有这样的事情

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

数据类型E有点像一长排在Excel中,它有一堆列。我需要收集所有Es并运行某种类型的透视汇总,就像在Excel中所做的那样。我可以看到在SparkFlink中我可以如何轻松完成这项工作。

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

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

是否有可能只重新计算EsA1并执行最小处理量。

对于Spark是否可以坚持RDD并且只在需要时更新其中的一部分(这里是EsA1)?

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

这是一个常见的用例吗?那甚至是FlinkSpark的设计目的?我会这么想,但我还没有用过,所以我的理解非常有限。

回答

0

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

在弗林克存在的动态表概念和退回流可能会激励你,也许事件表API已经涵盖了您的使用案例。你可以查看文档here

+0

我一直试图捕捉问题的本质。你说答案取决于很多条件。您希望我可以扩展哪些方面的问题? – phoenix7360