通过在Google DataFlow上使用JDBCIO的吞吐量非常低



我想通过Google DataFlow将数据加载到Google CloudSQL实例中。我认为没有用于CloudSQL的内置接收器,我决定使用org.apache.beam.sdk.io.jdbc.jdbcio。但是,进入CloudSQL的吞吐量很低(大约6个记录/秒(。

我怀疑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. 

发生了什么事?我该如何提高性能?

它已解决!

生成连接弦时,添加如下:

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/sec的吞吐量

注意:它仅在使用mySQL时才起作用。

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

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

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

您确定它是云SQL的吞吐量吗?您是否测量了来源的性能并证明它是瓶颈?

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

通常,我不建议这样做。Cloud SQL是一个单一的机器数据库,因此我怀疑您没有得到很多好处,甚至通过使用水平可扩展的方法(例如DataFlow(,它甚至是性能负面的。您应该能够使用单个VM实例将摄入量摄入到云SQL中。

相关内容

  • 没有找到相关文章

最新更新