上线使用canal遇到的问题

在使用canal 1.1.3与mysql 5.6集成过程中,遇到了解析数据库创建脚本错误,由于不支持'/*!32312 IF NOT EXISTS*/'语法导致。通过删除特殊字符并重启canal解决问题。此外,发现rocketmq配置的partitionsNum与canal实例设置不一致导致发送失败,调整为相同数值问题解决。注意,数据库批处理操作可能导致canal发送到rocketmq的消息中data字段数据量不同步。

------- 基础环境 -------

canal- 1.1.3

mysql - 5.6

------- 发生的问题 ------

1。发生的错误

canal启动,创建数据库的脚本为
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
canal启动报错,无法处理.
2019-06-13 16:18:59.318 [destination = example , address = /Ip:port , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
com.alibaba.fastsql.sql.parser.ParserException: illegal name, pos 40, line 1, column 17, token HINT
        at com.alibaba.fastsql.sql.parser.SQLExprParser.name(SQLExprParser.java:1812) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser.parseCreateDatabase(MySqlStatementParser.java:6543) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:292) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:228) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:536) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.repository.SchemaRepository.console(SchemaRepository.java:439) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:81) ~[canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applyHistoryOnMemory(DatabaseTableMeta.java:463) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:174) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:106) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:192) [canal.parse-1.1.3.jar:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_192]


查询tsdb的meta_history,把相关的创建语句进行修改,去掉 /* 这些字符, 重启OK。

 

2.发生的错误

rocketmq自动创建topic的队列配置为4,

在canal的具体的一个instance里面配置的instance.properties,其中 canal.mq.partitionsNum=16,错误是无限重试发送。

修复方式是canal.mq.partitionsNum=4, (但是在测试环境没有复现)

 

3.注意事项

数据库操作存在batch update,

canal发送到rocketmq的数据,data字段存在的数据有可能是多条,且数量不一(例如:批量更新了10,可能发了3条消息,一条消息包括1条数据,1条消息包括3条数据,1条消息包括6条数据)。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值