【问题标题】:Very low throughput by using JdbcIO on Google Dataflow在 Google Dataflow 上使用 JdbcIO 的吞吐量非常低
【发布时间】:2017-12-01 17:38:46
【问题描述】:

我想通过 Google Dataflow 将数据加载到 Google CloudSQL 实例中。 我认为 CloudSQL 没有内置 Sink,我决定使用 org.apache.beam.sdk.io.jdbc.JdbcIO。 但是,CloudSQL 的吞吐量非常低(大约 6 条记录/秒)。

我怀疑CloudSQL的spec太差了,但是升级后没有任何改进。

Dataflow的日志中有很多日志如下:

Proposing dynamic split of work unit my-project;2017-06-27_02_58_19-14077185378147382467;6703504927792172410 at 
{"fractionConsumed":0.9669782519340515} 

Rejecting split request because custom reader returned null residual source. 

发生了什么事?以及如何提高性能?

【问题讨论】:

    标签: sql google-cloud-platform google-cloud-sql google-cloud-dataflow apache-beam


    【解决方案1】:

    解决了!

    在生成连接字符串时,添加如下:

    JdbcIO.DataSourceConfiguration.create("com.mysql.jdbc.Driver", "jdbc:mysql://google/mydatabase?cloudSqlInstance=myproject:region:instance-name&socketFactory=com.google.cloud.sql.mysql.SocketFactory&rewriteBatchedStatements=true")
    

    添加“rewriteBatchedStatements=true”,它的工作。 吞吐量提高到 2000/秒左右!

    注意:它可能只在使用 mysql 时有效。

    【讨论】:

      【解决方案2】:

      拒绝拆分请求,因为自定义阅读器返回 null 残差 来源。

      您实现的任何自定义源似乎都不支持动态重新平衡。

      我怀疑 CloudSQL 的规范太差了,但是没有 升级后改进。

      您确定 Cloud SQL 的吞吐量是问题所在吗?您是否测量了源的性能并证明它是瓶颈?

      我想通过 Google 将数据加载到 Google CloudSQL 实例中 数据流

      一般来说,我不会推荐这个。 Cloud SQL 是一个单机数据库,所以我怀疑通过使用像 Dataflow 这样的水平可扩展方法,您不会获得很多好处,甚至可能对性能产生负面影响。您应该能够使用单个 VM 实例加载数据以同样快的速度提取到 Cloud SQL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多