【产品名称】OB, canal
【产品版本】
- oceanbase-ce-3.1.1-1.el7.x86_64.rpm
- canal.adapter-for-ob-rc1.tar.gz
- canal.admin-for-ob-rc1.tar.gz
- canal.deployer-for-ob-rc1.tar.gz
【问题描述】
我们刚开始搭建CDC, 搭建了一条 OB集群A → oblogproxy → canal server → kafka → canal adapter(mysql rdb) → OB集群B 的数据同步链路, 然后在 集群A 上用 sysbench 导入了一些数据, 然后监控 kafka 直到不再有数据过来, 然后我们检查了集群 A 和 B 对应表的记录数(count, 暂未做表 checksum), 发现两边数据量不一致, 暂未查到原因, 所以请教一下, 我们是否在搭建过程忽略了什么问题?
Note:
- sysbench 建的表有主键.
- 我们手动建了一张表, 没有主键, 测试发现 create table DDL 能同步到集群 B, 但 insert DML 未能同步到集群B. 手动插入数据时, adapter 已收到数据, 但 adapter 日志里报错. (此问题已有老师回复, canal adapter 暂不支持没主键或唯一键的表同步.)
1 个赞
附件是 kafka 和 adapter 的日志, 日志是在 sysbench 设了8张表, 每张表100条数据情况下产生的.
logs.tar (870400 KB)
川粉
#8
adapter也没报错的话,个人推测应该是漏掉了,adapter项目的数据库映射是怎么配置的?就是conf/rdb目录下边的配置文件。
rdb 配置直接走的db镜像, 所以不应该出现这个问题!
dataSourceKey: defaultDS
destination: example
outerAdapterKey: ob1
concurrent: true
dbMapping:
mirrorDb: true
database: sys.canal_test
其中
concurrent: true
是否会影响 ?
川粉
#10
理论上不会有影响,如果有错误的话至少应该有日志打出来的。
再请问下,之前无主键的报错跟这一批sysbench的数据写入时间上有交叉吗?如果有的话,能不能让adapter换个groupId再消费一次?这次只监听sysbench对应的表,看看有没有错误啥的
川粉
#11
以及,我看到你的database名字里是有sys前缀的,而kafka的log是没有的。考虑到我们提供的canal的配置默认会去掉db名中的租户前缀,需要确认下这里的rdb映射是否正确。
您好, 我们又测试了一遍, 两边仍然不一致, 测试配置如下:
- 按要求新建了租户, 在此租户下建库表做同步
- 跑 sysbench, 建了 8 张表, 每张 1000 条数据, 只做 prepare 步骤, 也即每张表 1000 条 insert 记录
- 采集了中间 kafka 的日志, 以及 adapter 的日志, 根据日志, 可以看到数据已经到 adapter, 比如sbtest1, INFO, DEBUG记录数各1000条
您好, 目前我们排查下来, 可能是和 syncBatchSize 参数设置有关系, 设置为 1 时同步正常, 原先默认是 1000, 但设置为 1 效率非常低, 基本上没办法使用,
目前我们正在看 adapter 源码, 麻烦老师也帮忙看下, 是不是 adapter 有bug.
syncBatchSize: 1
1 个赞