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時,也許。