【问题标题】:S3 based streaming solution using apache spark or flink使用 apache spark 或 flink 的基于 S3 的流解决方案
【发布时间】:2019-11-11 01:46:24
【问题描述】:

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

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

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

如果您认为有更好的架构/模式来解决这个问题,请指出正确的方向。

ps:我们已经考虑过将这些文件放入kafka,但由于带宽的可用性和文件的大小,我们排除了。

【问题讨论】:

  • 使用一些可靠的数据存储来存储检查点。如果您使用的是 HDFS,请增加检查点位置的复制因子。
  • Flink 可用于查看您的 s3 存储桶中的文件并对其进行处理。检查ci.apache.org/projects/flink/flink-docs-release-1.8/dev/…,您可以将FileProcessingMode.PROCESS_ONCE 设置为只处理一次。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多