mysql通过canal同步数据到oceanbase,canal-adapter报错

【 使用环境 】 测试环境
【 OB or 其他组件 】源端mysql 同步数据通过canal 目标端oceanbase
【 使用版本 】
mysql5.7.31 canal-1.1.6 oceanbase4.2
【问题描述】
源端mysql通过canal同步数据到oceanbase时,canal-adapter报错,报错时,mysql,canal deployer
日志均无报错,canal_deployer和canal_adapter安装在同一台服务器,且mysql到canal,canal到OB无出现网络问题。
报错信息如下
2023-08-30 16:17:51.476 [Thread-5] ERROR c.a.otter.canal.adapter.launcher.loader.AdapterProcessor - com.alibaba.otter.canal.protocol.exception.CanalClientException: deserializer failed Error sync but ACK!
当时mysql在做的SQL为简单的批量insert语句,约50000条,报错时,OB只同步到了1720条
【问题现象及影响】
报错后,同步数据中断

【附件】
同步的表结构如下
CREATE TABLE test1.sbtest1 (
id int(11) NOT NULL AUTO_INCREMENT,
k int(11) NOT NULL DEFAULT ‘0’,
c char(120) NOT NULL DEFAULT ‘’,
pad char(60) NOT NULL DEFAULT ‘’,
PRIMARY KEY (id),
KEY k_1 (k)
);

报错时,canal_deployer的日志如下
2023-08-30 16:17:21.755 [destination = example , address = /192.168.167.104:3310 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - —> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000021,position=4,serverId=2,gtid=,timestamp=1693383369000] cost : 437ms , the next step is binlog dump

canal-adapter日志如下
2023-08-30 16:17:51.476 [Thread-5] ERROR c.a.otter.canal.adapter.launcher.loader.AdapterProcessor - com.alibaba.otter.canal.protocol.exception.CanalClientException: deserializer failed Error sync but ACK!

ob日志如附件
observer.log.wf.7z (392 字节)

canal deployer参数如下
canal.instance.mysql.slaveId=1301

enable gtid use true/false

canal.instance.gtidon=false

position info

canal.instance.master.address=192.168.167.104:3310
canal.instance.master.journal.name=mysql-bin.000021
canal.instance.master.position=190
canal.instance.master.timestamp=
canal.instance.master.gtid=

rds oss binlog

canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

table meta tsdb info

canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

username/password

canal.instance.dbUsername=root
canal.instance.dbPassword=111111

canal-adapter 参数如下
application.yml
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null

canal.conf:
mode: tcp #tcp kafka rocketMQ rabbitMQ
flatMessage: true
zookeeperHosts:
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
consumerProperties:
# canal tcp consumer
canal.tcp.server.host: 127.0.0.1:11111
canal.tcp.zookeeper.hosts:
canal.tcp.batch.size: 500
canal.tcp.username:
canal.tcp.password:

srcDataSources:
test1DS:
url: jdbc:mysql://192.168.167.104:3310/test1?useUnicode=true #数据库
username: root
password: 111111
canalAdapters:

  • instance: example # canal instance Name or mq topic name
    groups:
    • groupId: g1
      outerAdapters:
      • name: logger
      • name: rdb
        key: mysql1
        properties:
        jdbc.driverClassName: com.mysql.jdbc.Driver
        jdbc.url: jdbc:mysql://192.168.167.127:2881/test1?useUnicode=true
        jdbc.username: root@sys
        jdbc.password: 111111
        threads: 1
        commitSize: 500

rdb文件配置如下
dataSourceKey: test1DS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
mirrorDb: true
database: test1

canal-adapter 这边有更多的报错信息吗?

另外,对于 mysql 和 ob 之间的数据同步,推荐使用我们的官方工具 oms。