新增ticdc到kafka同步任务后ticdc组件不断重启

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
开发环境

【概述】 场景 + 问题概述
业务需要新增ticdc到kafka的同步任务,然后ticdc组件不断重启,造成新任务合原来正常的同步任务都也不断重启,无法正常同步数据了
【备份和数据迁移策略逻辑】

ticdc任务配置文件如下:
case-sensitive = false

enable-old-value = true

[filter]
ignore-txn-start-ts = [1, 2]

rules = [‘testdb.tab1’, ‘testdb.tab2’, ‘testdb.tab3’]

[mounter]
worker-num = 2

[sink]
dispatchers = [
{matcher = [‘testdb.*’], dispatcher = “ts”},
]
protocol = “default”

[cyclic-replication]
enable = false

【背景】 做过哪些操作

【现象】 业务和数据库现象
如上配置文件,tab1和tab2源端有新增数据同步任务正常,但tab3有新增数据,就出现ticdc组件和同步任务不断重启,无法获取在kafka中获取源端tidb的增量数据
【问题】 当前遇到的问题
ticdc组件报错如下:
goroutine 648 [running]:
github.com/pingcap/ticdc/cdc/sink/codec.(*column).FromSinkColumn(0xc01ab29b40, 0xc01ab74810)
github.com/pingcap/ticdc@/cdc/sink/codec/json.go:67 +0x34b
github.com/pingcap/ticdc/cdc/sink/codec.sinkColumns2JsonColumns(0xc0159cf6b0, 0x16, 0x16, 0xc021d94960)
github.com/pingcap/ticdc@/cdc/sink/codec/json.go:227 +0xaa
github.com/pingcap/ticdc/cdc/sink/codec.rowEventToMqMessage(0xc01ab17100, 0xc01b8eb880, 0x34c)
github.com/pingcap/ticdc@/cdc/sink/codec/json.go:215 +0x1c8
github.com/pingcap/ticdc/cdc/sink/codec.(*JSONEventBatchEncoder).AppendRowChangedEvent(0xc0036026e0, 0xc01ab17100, 0x3, 0x2, 0x1)
github.com/pingcap/ticdc@/cdc/sink/codec/json.go:372 +0x43
github.com/pingcap/ticdc/cdc/sink.(*mqSink).runWorker(0xc003507440, 0x32e9920, 0xc0035bb880, 0x0, 0x0, 0x0)
github.com/pingcap/ticdc@/cdc/sink/mq.go:351 +0x3c8
github.com/pingcap/ticdc/cdc/sink.(*mqSink).run.func1(0xc00341a768, 0x2d49fd0)
github.com/pingcap/ticdc@/cdc/sink/mq.go:281 +0x46
golang.org/x/sync/errgroup.(*Group).Go.func1(0xc00360ced0, 0xc0035fec80)
golang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9/errgroup/errgroup.go:57 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
golang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9/errgroup/errgroup.go:54 +0x66
panic: interface conversion: interface {} is string, not []uint8
【业务影响】
解析kafka信息数据代码开发无法进行下去
【TiDB 版本】
tidb v5.0.2
【附件】

  • 相关日志、配置文件、Grafana 监控(https://metricstool.pingcap.com/)
  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息
  • TiDB-Overview 监控
  • 对应模块的 Grafana 监控(如有 BR、TiDB-binlog、TiCDC 等)
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

tab3表应该有什么特殊之处,对此我们进行如下验证:
1、将tab3改个名字tab3_2单独创建这1个表到kafka的ticdc同步任务,然后源端更新表tab3_2,同步任务还是报错

2、使用rename tab3 to tab3_bak, create table tab3 like tab3_bak, insert into tab3 select * from tab3_bak切换了表,之后单独创建这个表到kafka的ticdc同步任务,然后源端更新表tab3,同步任务正常了,分析发现这时候,在information_schema.tables表中tidb_table_id字段从tab3_bak(1007)变为tab3(1268),也就是改表表的元数据tidb_table_id同步任务正常了,原来的tidb_table_id=1007触发ticdc的内部bug了?

这个不一定有关系,麻烦反馈下 ticdc 的版本、ticdc 完整的报错日志,以及 kafka changefeed 任务创建的命令

这是一个已知问题,相关 issue 如下:

json codec met panic: interface conversion: interface {} is string, not []uint8 · Issue #2758 · pingcap/tiflow (github.com)

可以升级到 5.0.4 及之后的版本来解决该问题。

升级到v5.0.6后这个问题解决了,感谢各位:handshake:

1 个赞

我们是5.0.3,到时没有遇到你这种组件重启的问题, 我们的是任务hang住了。 看来我们也得升级一下了。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。