使用Apache Spark或Flink的基于S3的流解决方案

时间:2019-06-29 13:57:04

标签: apache-spark bigdata apache-flink flink-streaming spark-structured-streaming

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

企业希望每5分钟获得一次数据。相反,我们决定不使用每5分钟运行一次批处理作业,而是使用apache spark结构化流技术并实时处理数据。我的问题是生产这种解决方案有多么容易/困难?

我唯一担心的是,如果检查点位置损坏,删除检查点目录将重新处理最近1年的数据。有没有人使用s3通过Spark结构化流技术来生产任何解决方案,或者您认为flink在这种使用情况下更好?

如果您认为有解决此问题的更好的体系结构/模式,请向我指出正确的方向。

ps:我们已经考虑过将这些文件放入kafka,并且由于带宽的可用性和文件的大尺寸而被排除在外。

1 个答案:

答案 0 :(得分:0)

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

这将使spark程序更具挑战性,因为将在执行程序内部读取和处理文件,这实际上没有利用分布式处理。否则,请读入执行程序并将数据返回给驱动程序,以利用Spark的分布式处理。这将需要在内存方面更好地计划spark应用,因为'cos输入文件的大小会发生很大变化。

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