mysql - 带有 JdbcIO 编写器的 ApacheBeam/DataFlow runner 创建了太多连接

标签 mysql google-cloud-platform google-cloud-dataflow google-cloud-sql apache-beam

我正在使用 GCP 云 SQL 和 MySQL 实例,并使用 JdbcIo 将数据从 DataFlow 管道写入 MySQL。

DataFlow 似乎生成了太多连接,并达到了 DB 限制(4000),即使我在连接池中指定了最大大小:1000

 ComboPooledDataSource dataSource = new ComboPooledDataSource();
 try {
       dataSource.setDriverClass("org.mysql.Driver");
     } catch (PropertyVetoException e) {
            throw new RuntimeException("Failed set mysql driver",e);
     }
       dataSource.setJdbcUrl("jdbc:mysql://google/live-data?cloudSqlInstance<INSTANCE_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false&user=<USER>&password=<PASSWORD>");

       dataSource.setMaxPoolSize(1000);
       dataSource.setInitialPoolSize(1000);

此外,在仪表板中我可以看到比查询更多的连接: enter image description here

enter image description here

enter image description here

我的 pom.xml

 <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.4</version>
        </dependency>
        <dependency>
            <groupId>com.google.cloud.sql</groupId>
            <artifactId>mysql-socket-factory</artifactId>
            <version>1.0.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-io-jdbc</artifactId>
            <version>${beam.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

最佳答案

DataFlow generates too many connections, and reach the DB limit (4000), even that I specify in the connection pool, max size: 1000

一个快速的猜测是,由于 Dataflow 可以有多个运行器,每个运行器可能都有自己的连接池。这意味着每个池将有 1000 个独立的连接。这很可能比您实际使用的连接要多得多 - 请参阅 pool sizing 上的 HikariCP 维基。 .

Also, in the dashboard I can see much more connections then queries:

由于您设置了 setInitialPoolSize(1000),池不会根据需要懒惰地建立连接,而是在池初始化时创建 1000。从提供的示例中,您没有对连接生命周期提供任何限制,因此这些连接可能会尽可能长地持续存在。

关于mysql - 带有 JdbcIO 编写器的 ApacheBeam/DataFlow runner 创建了太多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992731/

相关文章:

Mysqlbug : Could not find a text editor.(尝试过 emacs)

mysql - 如何在 Doctrine 中选择带有 int 标志的行

grails - 如何使用 GoogleServiceAuthentication 类将文件上传到 grails 中的谷歌存储?

mysql - 获取两个时间戳之间的范围

php - 在 MySQL 和 PHP 中创建好友关系

java - 谷歌云日志的日志格式

python - 针对住房回归示例关闭 Cloud ML 预测

python - 连接由主键链接的 2 个 JSON 输入

google-bigquery - Big Query 中的 WRITE_TRUNCATE 行为

google-cloud-datastore - 如何将 Google Datastore CompositeFilter 与 Dataflow 结合使用?