我们有批处理管道将文件(主要是csv)写入到s3存储桶中。有些流水线每分钟写入一次,有些每5分钟写入一次。目前,我们有一个批处理应用程序,它每小时运行一次,处理这些文件。
企业希望数据每5分钟可用一次。取而代之的是,我们决定使用apache spark结构化流式处理,并实时处理数据,而不是每5分钟运行一次批处理作业。我的问题是,这个解决方案的生产有多容易/多难?
我唯一担心的是,如果检查点位置损坏,删除检查点目录将重新处理过去1年的数据。有没有人使用s3的spark structured来生产任何解决方案,或者你认为flink更适合这个用例?
如果您认为有更好的架构/模式来解决这个问题,请给我指出正确的方向。
ps:我们已经考虑过将这些文件放到kafka中,但由于带宽的可用性和文件的大小,我们已经排除了这种可能性。
发布于 2019-07-01 03:55:25
我找到了一种方法来做到这一点,而不是最有效的方法。因为我们之前已经生产了基于Kafka的解决方案,所以我们可以使用s3 streams和lambda将事件推送到Kafka中。该事件将仅包含文件位置和大小等元数据。
这将使spark程序更具挑战性,因为文件将在executor中读取和处理,这实际上没有利用分布式处理。否则,读入executor并将数据带回驱动程序,以利用spark的分布式处理。这将需要spark应用程序在内存方面进行更好的规划,因为输入文件的大小变化很大。
https://stackoverflow.com/questions/56818113
复制相似问题