alibaba / canal

阿里巴巴 MySQL binlog 增量订阅&消费组件
Apache License 2.0
28.44k stars 7.6k forks source link

canal1.1.6全量同步ES报错 com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 #4390

Open q303757102 opened 2 years ago

q303757102 commented 2 years ago

Question

canal_adapter 全量同步报错信息如下,有没有什么解决办法呀? 2022-09-02 20:52:12.295 [pool-4-thread-4] ERROR c.a.otter.canal.client.adapter.es7x.etl.ESEtlService - com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 java.lang.RuntimeException: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 at com.alibaba.otter.canal.client.adapter.support.Util.sqlRS(Util.java:65) ~[client-adapter.common-1.1.6-SNAPSHOT.jar:na] at com.alibaba.otter.canal.client.adapter.es7x.etl.ESEtlService.executeSqlImport(ESEtlService.java:64) ~[na:na] at com.alibaba.otter.canal.client.adapter.support.AbstractEtlService.lambda$importData$1(AbstractEtlService.java:91) ~[client-adapter.common-1.1.6-SNAPSHOT.jar:na] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1749) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1419) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1399) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1389) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:100) ~[druid-1.2.6.jar:1.2.6] at com.alibaba.otter.canal.client.adapter.support.Util.sqlRS(Util.java:50) ~[client-adapter.common-1.1.6-SNAPSHOT.jar:na] ... 6 common frames omitted

usedssl commented 2 years ago

调用sqlRS失败,就日志信息看看,可以从这几个方面排查 1.连接的基本信息 2.同步任务数量 3.同步数据量(先小量试试)

q303757102 commented 2 years ago

调用sqlRS失败,就日志信息看看,可以从这几个方面排查 1.连接的基本信息 2.同步任务数量 3.同步数据量(先小量试试)

需要同步的数据量100多W,这个数据少不了,我在配置里面没看到有同步任务相关的配置

usedssl commented 2 years ago

看看配置文件里的mysql的信息,以及关于sql参数,在调整一下批量提交数试试,是SqlRS失败(ds数据源,sql, valuse(sql映射值))方面看看

------------------ 原始邮件 ------------------ 发件人: "alibaba/canal" @.>; 发送时间: 2022年9月5日(星期一) 下午3:00 @.>; @.**@.>; 主题: Re: [alibaba/canal] canal1.1.6全量同步ES报错 com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 (Issue #4390)

调用sqlRS失败,就日志信息看看,可以从这几个方面排查 1.连接的基本信息 2.同步任务数量 3.同步数据量(先小量试试)

需要同步的数据量100多W,这个数据少不了,我在配置里面没看到有同步任务相关的配置

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

q303757102 commented 2 years ago

看看配置文件里的mysql的信息,以及关于sql参数,在调整一下批量提交数试试,是SqlRS失败(ds数据源,sql, valuse(sql映射值))方面看看 ------------------ 原始邮件 ------------------ 发件人: "alibaba/canal" @.>; 发送时间: 2022年9月5日(星期一) 下午3:00 @.>; @.**@.>; 主题: Re: [alibaba/canal] canal1.1.6全量同步ES报错 com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 (Issue #4390) 调用sqlRS失败,就日志信息看看,可以从这几个方面排查 1.连接的基本信息 2.同步任务数量 3.同步数据量(先小量试试) 需要同步的数据量100多W,这个数据少不了,我在配置里面没看到有同步任务相关的配置 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

这是我的配置文件,现在的现象是程序运行一切正常,增量同步也正常,全量同步4W数据。最后只成功了3W多,然后就是报上面的错误

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 300
  retries: -1
  timeout: 30000
  accessKey:
  secretKey:
  consumerProperties:
    # canal tcp consumer
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.username: canal
    canal.tcp.password: A5CBrfhHDwdeNl7o
    # kafka consumer
    kafka.bootstrap.servers: 127.0.0.1:9092
    kafka.enable.auto.commit: false
    kafka.auto.commit.interval.ms: 1000
    kafka.auto.offset.reset: latest
    kafka.request.timeout.ms: 40000
    kafka.session.timeout.ms: 30000
    kafka.isolation.level: read_committed
    kafka.max.poll.records: 1000
    # rocketMQ consumer
    rocketmq.namespace:
    rocketmq.namesrv.addr: 127.0.0.1:9876
    rocketmq.batch.size: 1000
    rocketmq.enable.message.trace: false
    rocketmq.customized.trace.topic:
    rocketmq.access.channel:
    rocketmq.subscribe.filter:
    # rabbitMQ consumer
    rabbitmq.host:
    rabbitmq.virtual.host:
    rabbitmq.username:
    rabbitmq.password:
    rabbitmq.resource.ownerId:

  srcDataSources:
    defaultDS:
      url: jdbc:mysql://xxxxx/xxx?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
      username: root
      password: xxxxx
  canalAdapters:
  - instance: example # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
      - name: es7
        hosts: http://xxx:9200 # 127.0.0.1:9200 for rest mode
        properties:
          mode: rest # or rest
          security.auth: elastic:xxxx #  only used for rest mode
          cluster.name: xxx
q303757102 commented 2 years ago

终于找到问题了,需要加一个最大连接数。但是配置文件,以及相关文档根本没提及,谷歌真是个好东西。 再怎么也应该把这个maxActive参数添加到配置文件里面呀,不知道开发人员怎么想的,真的坑死了...

srcDataSources:
    defaultDS:
      url: 这里填源数据库的jdbc连接信息,例:jdbc:mysql://127.0.0.1:3306/testdb
      username: 数据库账号,例:root
      password: 数据库密码,例:root
      maxActive: 100 #额外增加这一行,默认的连接数只有3,会导致全量同步出现异常,导致全量同步数据缺失,最好改大一点
  canalAdapters:
usedssl commented 2 years ago

其实改大批量次数也可以,我记得源码里是通过获取的数据量动态创建线程数量的(去年春老版本没这个参数好像,不设置会不会动态计算), 把批次数据量调大应该也行(不并行0.0),解决就好。

------------------ 原始邮件 ------------------ 发件人: "alibaba/canal" @.>; 发送时间: 2022年9月6日(星期二) 下午3:46 @.>; @.**@.>; 主题: Re: [alibaba/canal] canal1.1.6全量同步ES报错 com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 (Issue #4390)

终于找到问题了,需要加一个最大连接数。但是配置文件,以及相关文档根本没提及,谷歌真是个好东西。 再怎么把这个maxActive参数添加到配置文件里面呀,真的坑死了... srcDataSources: defaultDS: url: 这里填源数据库的jdbc连接信息,例:jdbc:mysql://127.0.0.1:3306/testdb username: 数据库账号,例:root password: 数据库密码,例:root maxActive: 100 #额外增加这一行,默认的连接数只有3,会导致全量同步出现异常,导致全量同步数据缺失,最好改大一点 canalAdapters:
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

TankyMoose commented 2 years ago

兄弟,你用的canal_adapter 1.1.6是哪个版本的,我用1.1.6.release版的启动不了,一直报这个错。 image

usedssl commented 2 years ago

试试换一下jdk版本

------------------ 原始邮件 ------------------ 发件人: "alibaba/canal" @.>; 发送时间: 2022年9月16日(星期五) 晚上9:45 @.>; @.**@.>; 主题: Re: [alibaba/canal] canal1.1.6全量同步ES报错 com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 3, maxActive 3, creating 0 (Issue #4390)

兄弟,你用的canal_adapter 1.1.6是哪个版本的,我用1.1.6.release版的启动不了,一直报这个错。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

wukong567 commented 1 year ago

遇到相同的问题,maxActive调大了,几十万的数据可以正常同步,但是同步千万级的表,没法把maxActive调整这么大,还是报这个错,请问怎么处理?