2

Google CloudflowインスタンスにGoogle Dataflow経由でデータを読み込みたいとします。 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

カスタムリーダーがヌルの残量を返したために分割リクエストが拒否されました ソース。

実装したカスタムソースは、動的リバランスをサポートしていないようです。

CloudSQLの仕様があまりにも貧弱だと思われますが、アップグレード時には が改善されていません。

クラウドSQLのスループットは問題ではないですか。あなたのソースのパフォーマンスを測定し、それがボトルネックであることを証明しましたか?

私は一般的にGoogleの データフロー

てGoogle CloudSQLインスタンスに

をデータをロードしたいのですが、私はこれをお勧めしません。 Cloud SQLは単一のマシンデータベースであるため、データフローのような水平方向にスケーラブルな方法を使用することで、多くのメリットが得られない可能性があります。単一のVMインスタンスを使用してデータをロードするのと同じように、クラウド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 = true" を追加するには、それが働いています。 スループットは約2000/secに向上しました!

注意:おそらくmysqlを使用している場合にのみ機能します。

関連する問題