2

Ich möchte Daten über Google Dataflow in die Google CloudSQL-Instanz laden. Ich denke, dass es keine eingebaute Sink für CloudSQL gibt, entscheide ich mich für org.apache.beam.sdk.io.jdbc.JdbcIO. Der Durchsatz in CloudSQL ist jedoch sehr gering (ca. 6 Datensätze/Sek.).Sehr geringer Durchsatz durch Verwendung von JdbcIO in Google Dataflow

Ich vermute, dass die Spezifikation von CloudSQL zu arm ist, aber es gibt keine Verbesserung, wenn es aktualisiert wird.

Im Protokoll des Datenflusses, dort sind viele Protokolle wie folgt:

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. 

Was ist passiert? Und wie kann ich die Leistung verbessern?

Antwort

0

Ablehnen einer geteilten Anfrage, weil der benutzerdefinierte Leser null Rest Quelle zurückgegeben hat.

Die von Ihnen implementierte benutzerdefinierte Quelle scheint die dynamische Neuverteilung nicht zu unterstützen.

Ich vermute, dass die Spezifikation von CloudSQL zu schlecht ist, aber es gibt keine verbessern, wenn es aktualisiert wird.

Sind Sie sicher, dass der Durchsatz zu Cloud SQL das Problem ist. Haben Sie die Leistung Ihrer Quelle gemessen und bewiesen, dass dies der Flaschenhals ist?

Ich mag würde Daten in Google CloudSQL Instanz über Google Datenfluß-

Allgemeinen laden, ich würde das nicht empfehlen. Cloud SQL ist eine Datenbank mit einer einzigen Maschine. Ich vermute, dass Sie mit einer horizontal skalierbaren Methode wie Dataflow nicht viel Nutzen und vielleicht sogar eine negative Performance erzielen. Sie sollten die Aufnahme in Cloud SQL genauso schnell durchführen können, indem Sie eine einzige VM-Instanz zum Laden der Daten verwenden.

1

Es ist gelöst!

Bei verbindungs ​​String zu erzeugen, das Hinzufügen, wie unten:

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" Hinzufügen, ist es funktionierte. Der Durchsatz verbesserte sich auf 2000/Sek.

Hinweis: Es funktioniert nur, wenn Sie vielleicht mysql verwenden.

Verwandte Themen