将数据从 Kinesis(或 s3)传输到 RDS postgres chron 作业

bil*_*l_e 6 postgresql amazon-s3 amazon-web-services amazon-kinesis amazon-kinesis-firehose

我对 AWS 还很陌生,我正在尝试找到一种方法将数据从 Kinesis 流可靠地传输到 AWS RDS postgres 数据库表。记录在传入过程中需要进行小的转换,例如过滤器(并非所有记录都会被插入,具体取决于键),并解析以插入到 postgres 中。目前,来自 Kinesis 流的数据通过 Firehose 以 parquet 的形式转储到 S3 存储桶中。

我对这样做的许多可能的方式有点迷失,比如:

  • Kinesis 流 -> Firehose -> Lambda -> RDS
  • Kinesis 流 -> Firehose -> S3 -> 数据管道 ETL 作业 -> RDS
  • S3 -> RDS 的数据库迁移?
  • AWS 胶水?
  • 其他的...?

在非无服务器世界中,我会每隔一小时运行一次 chron 作业,这将获取最近的 S3 存储桶分区(即年/月/日/小时)中的文件,即最近的一小时,并过滤掉RDS 中不需要的记录,并将其余记录批量插入到 RDS 中。我不希望 EC2 实例在 95% 的时间内处于空闲状态来执行此操作。有什么建议吗?

Bar*_*zny 2

感谢您的澄清。使用服务器的传统 ETL 方式执行此操作有一些缺点。要么您需要让机器在大部分时间保持空闲状态,要么您需要每次都在按需创建机器之前等待 - 正如您所说。

对于 Firehose,在我看来,当您有大量实时数据需要摄取时,这很有趣。关于AWS Glue,对我来说它更像是一个“托管”Apache Spark,因此如果您有一些数据处理逻辑要在大量批量数据中实现,它可能会很有趣。但根据你的描述,情况并非如此,对吗?

综上所述,如果您认为一次插入的数据量总是几MB,对我来说,最简单的解决方案是最好的,即 Kinesis -> Lambda -> RDS 以及另一个 Lambda 来备份 S3 上的数据( Kinesis 保留期限仅限于 7 天)。从定价的角度来看,这特别有趣 - 显然你没有很多数据,Lambda 是按需执行的,例如通过批处理 1000 个 Kinesis 记录,所以这是一个省钱的好机会。否则,如果您期望拥有越来越多的数据,那么使用“Firehose -> Lambda”版本似乎不太适合我,因为您不会立即向数据库加载大量数据。