gpt4 book ai didi

amazon-redshift - 从 MySQL 到 Redshift 的近实时 ETL

转载 作者:行者123 更新时间:2023-12-04 06:55:35 30 4
gpt4 key购买 nike

我试图找出从 MySQL 中提取数据的最有效方法,将其转换并以近乎实时的方式加载到 Redshift。
目前,我们有持续约 40 分钟的隔夜 ETL 过程(使用 Pentaho),我们希望将其替换为近乎实时的(小批量 1-5 分钟)。

我找到了几个用于从 MySQL 二进制日志(即 http://maxwells-daemon.io)中提取数据的工具,以及连接到 AWS Kineses 的连接器,我计划使用 Apache Spark 或 AWS Lambda 转换和连接数据并将其写入 S3,然后从那里 COPY命令将其写入 Redshift。

有人对此或类似解决方案有任何建议或建议吗?
提前致谢!

最佳答案

这实际上取决于您想对来自 MySQL 的数据进行哪些转换,以及哪种语言和框架最适合您的环境。

以下是我的建议

  • 在 MySQL 和 Redshift 之间添加中间存储,例如 S3
  • 考虑数据重新加载机制,以防数据加载到 Redshift 失败

  • 我会考虑 AWS Data Pipeline因为它有现成的模板、重试机制和内置的日志记录和监控。

    它可能看起来像这样:

    MySQL -> S3 -> Redshift (staging) -> SQL -> Redshift (production)



    MySQL -> S3

    此数据管道将以“ Incremental copy of RDS MySQL to S3 ”模板开头。

    您可以参数化 S3 路径以存储来自 MySQL 的增量数据,以便使用 S3 前缀更轻松地随时间管理这些增量。如果不再使用 S3 上的数据,您可以使用 S3 对象生命周期管理定期删除这些对象。

    但是,在 S3 上拥有数据还提供了其他几个好处,您可以使用 AWS Athena 查询它,使用 QuickSight 进行可视化,或者仅使用 Infrequent Access 或 Glacier 存储类进行存档,以降低存储成本但保留以备将来使用。

    S3 -> Redshift(暂存)

    当然,对于您的用例,它必须转到 Redshift,因此我推荐 AWS Redshift Loader Lambda。它的设置有点复杂,但一旦成功完成,就像他们声称的那样,它非常接近于零管理。见 this

    使用 AWS Redshift Loader,每次数据到达定义的 S3 前缀时,它都会加载到 Redshift 集群(还有一个),您可以配置 SNS 以通知您或某些日志系统。还有其他选项,例如在加载前等待 x 个文件,或者每 y 分钟加载一次。

    此外,您可能需要仅将部分数据从 S3 加载到 Redshift 到测试或开发环境中。使用 AWS Redshift Loader,您只能定义特定的 S3 前缀,例如/data/2017/11 加载到 Redshift。

    通过使用 Redshift Loader,您可以使数据加载异步,因此,较小和控制该过程有点困难。这可能是您的案例的问题。

    如果数据加载到 Redshift 失败,您可以使用 Redshfit Loader 命令行工具将特定对象重新加载到 Redshfit。

    Redshift (暂存)-> Redshift (生产)

    请注意,Redshift 不强制执行参照完整性,例如唯一键,这意味着您必须拥有防止将重复行插入 Redshift 表的机制。如果您不担心重复,这无关紧要,您的数据已经在 Redshift 中。

    为什么这有关系?因为,如果从源(即 MySQL)检索的数据已经在 Redshift 中,您必须知道要采取什么操作。你是覆盖它,还是忽略它。

    通过在 Redshift 本身中执行此操作,可以使用唯一列轻松比较新行和现有行,然后删除和插入或仅更新。在 Redshfit 之外进行,可能意味着跟踪 Redshift 中已经可用的唯一键并在那里进行比较。在哪里?什么时候更新它们?如何?也许您已经有了解决方案。

    因此,在上一步中,您将数据插入 Redshift(暂存)。为了在将其移动到生产表时确保数据完整性,我们必须进行合并。 AWS 建议使用 following在 Redsift 中合并数据的技术。

    如果是这样,为什么不也使用 SQL 进行转换,以便管理更少的组件?

    您可以使用 SQL 定义转换作业,将这些 SQL 脚本存储在 S3 上并在 SQLActivity 中引用它们。用于在您的 Redsshift 集群上与数据合并脚本一起执行。

    鉴于 AWS Kinesis 向 S3 功能的转换和存储,它也可能适用。我上面提出的一些要点也适用于使用 Kinesis。

    关于amazon-redshift - 从 MySQL 到 Redshift 的近实时 ETL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387341/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com