2

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

我怀疑CloudSQL的规格太差,但升级后并没有改进。

在日志数据流中,有很多是记录如下:

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

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

无论您实施的自定义源是否支持动态重新平衡,

我怀疑CloudSQL的规格太差,但升级时没有 的改进。

您确定它是吞吐量到Cloud SQL是问题。您是否衡量了源代码的性能,并证明它是瓶颈?

我想通过谷歌 数据流将数据加载到谷歌CLOUDSQL例如

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

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 =真”,它的工作。 吞吐量提高到2000 /秒左右!

注意:它只适用于使用mysql时,也许。