在 Amazon S3 中实施 CDC

vva*_*zza 0 cdc amazon-s3 amazon-web-services aws-lambda

我对云空间相当陌生。作为我们当前项目的一部分,我们正在尝试在 Amazon S3 存储桶中创建数据湖。将会有另一个 S3 层,其中包含前一层发生的 CDC。架构团队建议使用 Talend 或 Streamsets。是否有其他方法可以将 CDC 从 S3 实施到另一个 S3 存储桶?

Nit*_*ena 5

从事务源提取数据时,实施 CDC 或修补 CDC 始终是一项重要任务。虽然 S3 中的对象是不可变的,所以 S3 本身不提供任何内容来合并捕获的更改数据 (CDC)。在 S3 或 AWS-Data-Lakes 中实现 CDC 修补的方法很少。

首先,您需要确保您的 ETL 工具管道(Stream-sets/NiFi/Sqoop)应该能够从源系统获取更新的事务/记录(通过使用 last_modified_date 列等或通过事务日志)并且将其放置在相同的 s3 diff 路径或不同的 s3 存储桶 (CDC-delta) 中。

现在要将这个增量(CDC)合并到基表中,您可以使用下面提到的方法之一:

  1. 如果您在环境中使用 AWS EMR 或 Spark,我建议使用Apache-hudi。现在开源,但这是 Uber 早些时候设计的,用于在数据湖中提供事务表的设施。即使在实时场景中,它也能够将 CDC 补丁合并到基础数据中,这可能会节省您在数据湖中实现 lambda 架构的精力。请参阅此链接 - https://aws.amazon.com/blogs/aws/new-insert-update-delete-data-on-s3-with-amazon-emr-and-apache-hudi/
  2. 最近,data bricks 推出的一项令人惊叹的功能是Delta Lakes。这种使用 Delta Lakes 的方法确实很棒,可以为您提供开箱即用的性能。Delta Lakes 为您的数据湖提供 ACID 事务功能,并在流式传输和批处理场景中提供更好的性能。请参阅这些链接,其中 delta-lake 已使用 AWS DMS 和 S3 实施。 https://databricks.com/blog/2019/07/15/migration-transactional-data-to-a-delta-lake-using-aws-dms.html https://databricks.com/blog/2019/03 /19/efficient-upserts-into-data-lakes-databricks-delta.html
  3. 另一种方法是,您可以编写自己的自定义 Spark 作业来执行此功能,如下面的链接中所述,但如果您的数据集很大,那么这是一种缓慢且昂贵的操作,并且在实际情况下您可能需要一些其他技术- CDC 及时打补丁。请参阅链接 -更改 Spark 中的数据捕获