我想通过Google Dataflow将数据加载到Google CloudSQL实例中。 我认为没有针对CloudSQL的内置Sink,我决定使用org.apache.beam.sdk.io.jdbc.JdbcIO。 但是,CloudSQL的吞吐量非常低(约6个记录/秒)。
我怀疑CloudSQL的规格太差了,但升级时没有改进。
在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.
发生了什么?我怎样才能提高性能?
答案 0 :(得分: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时才有效。
答案 1 :(得分:0)
拒绝拆分请求,因为自定义读取器返回了null残差 源。
您实施的任何自定义来源似乎都不支持动态重新平衡。
我怀疑CloudSQL的规格太差了,但是没有 在升级时改进。
您确定Cloud SQL的吞吐量是个问题。您是否测量过源的性能并证明它是瓶颈?
我想通过Google将数据加载到Google CloudSQL实例中 数据流
一般来说,我不推荐这个。 Cloud SQL是一个单机数据库,所以我怀疑你没有获得很多好处,也许它甚至可以通过使用像Dataflow这样的水平可伸缩方法来表现性能。您应该能够像使用单个VM实例一样快速地加载到Cloud SQL中来加载数据。