[英]Flink or Spark for incremental data
我没有Flink
或Spark
经验,我想在我的用例中使用其中之一。 我想介绍一下我的用例,并希望能对是否可以用其中任何一种方法有所了解,以及如果他们俩都能做到这一点,哪种方法最好。
我在数据存储区中存储了一堆实体A
(确切地说是Mongo,但这并不重要)。 我有一个Java应用程序,可以加载这些实体并在其上运行一些逻辑以生成某种数据类型E
的流(要明确地说100%我没有任何数据集中的Es
,我需要用Java生成它们从数据库加载As
之后
所以我有这样的事情
A1 -> Stream<E>
A2 -> Stream<E>
...
An -> Stream<E>
数据类型E
有点像Excel中的长行,它有一堆列。 我需要收集所有Es
并像在Excel中一样运行某种数据透视聚合。 我可以看到如何在Spark
或Flink
中轻松地做到这一点。
现在是我无法弄清的部分。
想象一下,实体A1
被更改(由用户或进程更改),这意味着A1
所有Es
都需要更新。 当然,我可以重新加载所有的As
,重新计算所有的Es
,然后重新运行整个聚合。 我想知道这里是否有可能更聪明。
是否可能仅重新计算A1
的Es
并进行最少的处理。
对于Spark
,是否可以保留RDD
并仅在需要时更新它的一部分(这里是A1
的Es
)?
对于Flink
,在流传输的情况下,是否可以更新已处理的数据点? 它可以处理这种情况吗? 还是可以为A1
的旧Es
生成负面事件(即从结果中删除它们)然后添加新事件?
那是一个普通的用例吗? 甚至Flink
或Spark
都打算这样做吗? 我会这样想,但是我也没有用过,所以我的理解非常有限。
我认为您的问题非常广泛,取决于许多条件。 在flink中,您可以具有MapState<A, E>
并仅更新更改后的A's
值,然后根据您的用例生成更新后的E's
下游或生成差异(收回流)。
在Flink中,存在Dynamics Tables和Retraction流的概念,这可能会激发您的灵感,或者可能是Table API已经涵盖您的用例。 您可以在这里查看文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.