使用 apache spark 或 flink 的基于 S3 的流解决方案

S3 based streaming solution using apache spark or flink

我们有批处理管道将文件(主要是 csv)写入 s3 存储桶。其中一些管道每分钟写入一次,而另一些管道每 5 分钟写入一次。目前,我们有一个批处理应用程序,每小时运行一次来​​处理这些文件。

企业希望数据每 5 分钟可用一次。相反,我们决定使用 apache spark 结构化流并实时处理数据,而不是每 5 分钟 运行 个批处理作业。我的问题是 easy/difficult 如何生产此解决方案?

我唯一担心的是如果检查点位置损坏,删除检查点目录将重新处理过去 1 年的数据。有没有人使用 s3 使用 spark structured streaming 生产任何解决方案,或者您认为 flink 更适合这个用例?

如果您认为这个问题有更好的architecture/pattern,请指出正确的方向。

ps:我们已经考虑过将这些文件放入kafka中,但由于带宽和文件体积较大而排除了。

我找到了一种方法,但不是最有效的方法。由于我们之前已经生产了基于 Kafka 的解决方案,我们可以使用 s3 流和 lambda 将事件推送到 Kafka。该事件将仅包含元数据,例如文件位置和大小。

这将使 spark 程序更具挑战性,因为文件将在执行器内部读取和处理,这实际上没有利用分布式处理。或者,读入executor,将数据带回driver,利用spark的分布式处理。这将需要在内存方面更好地规划 spark 应用程序,因为输入文件大小变化很大。

https://databricks.com/blog/2019/05/10/how-tilting-point-does-streaming-ingestion-into-delta-lake.html