【问题标题】:Transfer data from Kinesis (or s3) to RDS postgres chron job将数据从 Kinesis(或 s3)传输到 RDS postgres chron 作业
【发布时间】:2019-03-22 17:12:25
【问题描述】:

我是 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% 的时间都处于空闲状态来执行此操作。有什么建议吗?

【问题讨论】:

  • 嗨,好点,但在问之前,我有一些问题。要过滤和插入的数据量是多少?您想使用哪种方法将数据插入 RDS?一个 INSERT INTO 序列,一个批量加载?您想要的数据新鲜度是多少?
  • 目前不多,一次几mb。 INSERT INTO 序列或批量加载都可以。它不需要低延迟,可能需要几分钟。不过,我会对低延迟或高延迟方式感兴趣,我只是想了解这可能出现的不同方式。

标签: postgresql amazon-web-services amazon-s3 amazon-kinesis amazon-kinesis-firehose


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2015-01-03
    • 2020-07-18
    • 2021-11-05
    • 2020-11-27
    • 2019-09-13
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多