繁体   English   中英

Flink或Spark获取增量数据

[英]Flink or Spark for incremental data

我没有FlinkSpark经验,我想在我的用例中使用其中之一。 我想介绍一下我的用例,并希望能对是否可以用其中任何一种方法有所了解,以及如果他们俩都能做到这一点,哪种方法最好。

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

所以我有这样的事情

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

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

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

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

是否可能仅重新计算A1Es并进行最少的处理。

对于Spark ,是否可以保留RDD并仅在需要时更新它的一部分(这里是A1Es )?

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

那是一个普通的用例吗? 甚至FlinkSpark都打算这样做吗? 我会这样想,但是我也没有用过,所以我的理解非常有限。

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

在Flink中,存在Dynamics TablesRetraction流的概念,这可能会激发您的灵感,或者可能是Table API已经涵盖您的用例。 您可以在这里查看文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM