flink或spark用于增量数据

b4lqfgs4  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(489)

我对这两个都没有经验 Flink 或者 Spark ,我想在我的用例中使用其中一个。我想介绍一下我的用例,希望能了解一下这两种方法是否都能做到,如果它们都能做到,那么哪种方法效果最好。
我有很多实体 A 存储在数据存储中(准确地说是mongo,但其实并不重要)。我有一个java应用程序,它可以加载这些实体并在它们上运行一些逻辑来生成某种数据类型的流 E (100%清楚地说,我没有 Es 在任何数据集中,我都需要在加载 As (来自db)
所以我有这样的东西

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

数据类型 E 有点像excel中的长行,它有一堆列。我需要收集所有的 Es 并像在excel中那样运行一些pivot聚合。我能看出我在这两种情况下都能轻而易举地做到这一点 Spark 或者 Flink .
现在是我想不通的部分。
想象一个实体 A1 (由用户或进程)更改,这意味着 Es 为了 A1 需要更新。我当然可以把我所有的钱都装进去 As ,重新计算所有 Es ,然后重新运行整个聚合。我想知道是否有可能在这里更聪明一点。
是否可以只重新计算 Es 为了 A1 并尽可能减少处理量。
为了 Spark 有没有可能坚持下去 RDD 并且只在需要的时候更新它的一部分(这里是 Es 为了 A1 )?
为了 Flink ,在流式传输的情况下,是否可以更新已处理的数据点?它能处理那种案子吗?或者我可以为你制造负面事件吗 A1 他很老了 Es (即从结果中删除它们),然后添加新的?
这是一个常见的用例吗?那是不是 Flink 或者 Spark 是设计用来做什么的?我想是的,但我也没有用过,所以我的理解是非常有限的。

e5nqia27

e5nqia271#

我认为你的问题很广泛,取决于许多条件。在Flink你可以有一个 MapState<A, E> 只更新更改的 A's 然后根据您的用例生成更新的 E's 下游或产生差异(收缩流)。
在flink中,动态表和收回流的概念可能会启发您,或者事件表api已经涵盖了您的用例。你可以在这里查看文件

相关问题