【问题标题】:Writing to Cloud SQL via Dataflow pipeline is very slow通过 Dataflow 管道写入 Cloud SQL 非常慢
【发布时间】:2019-02-25 22:29:35
【问题描述】:

我设法通过 JDBCIO 连接到云 sql

DataSourceConfiguration.create("com.mysql.jdbc.Driver","jdbc:mysql://google/?cloudSqlInstance=::&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=&password=")

这可行,但是,1000 条记录的批量写入需要 2-5 分钟,这太糟糕了。我尝试了不同的网络,看看这是否相关,结果是一致的。

有人有什么想法吗?

【问题讨论】:

  • 我很好奇它是否与数据流创建以促进与实例通信的代理有关.....?

标签: google-cloud-platform google-cloud-dataflow google-cloud-sql


【解决方案1】:

你在哪里初始化这个连接?如果您在 DoFn 内部执行此操作,则会在每个捆绑包上建立和拆除套接字时产生延迟。

看看DoFn.Setup,它提供了一种干净的方式来初始化资源,这些资源将在捆绑调用中保持不变。

【讨论】:

  • 感谢您的回复。这是有问题的块.... p.apply("Reading from file for cloud sql", TextIO.read().from("")) .apply("Write to cloud sql", JdbcIO. write().withDataSourceConfiguration(DataSourceConfiguration.create("com.mysql.jdbc.Driver","jdbc:mysql://google/?cloudSqlInstance=::&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user =&password=")).withStatement("(INSERT STATEMENT) values()") .withPreparedStatementSetter((element, query) -> { try { // 这里有一些 setString 命令 } catch(Exception e) { LOG.warn( e.getMessage()); } }) );
  • 你是说问题是上面的设置吗?
  • 您使用的是本地运行器 (DirectRunner) 还是 DataflowRunner?您使用的是哪个版本的 Beam?
  • 我目前正在使用 DirectRunner,虽然我已经尝试了这两种方法,但同样的问题。
  • 我认为我们没有正确测试 JDBCIO -> Cloud SQL 连接,因此可能存在性能问题。我还会检查前面提到的错误 Eric。目前JDBCIO配置为批量推送1K条记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多