这里将CDC 4.0.15使用做一下总结,方便后续查阅。
这边的生产集群是从 4.0.11 升级到 4.0.15
CDC监控图表
1、图表可以看到CPU和内存使用率降低了很多。goroutine线程数也减少了非常多。
2、稳定了很多,升级了2周CDC没有自动重启过,不像 4.0.11 经常自动重启。
3、每个changefeed执行DDL都是异步调用,并不会影响其他DDL的执行。
下面是日志,可以看到DDL现在是异步调用。
[2021/12/14 15:09:21.967 +08:00] [INFO] [async_sink.go:132]
[“Execute DDL succeeded”] [changefeed=cs-mysql] [ignored=true]
[ddl="{“StartTs”:429776112279617537,“CommitTs”:429776112279617540,“TableInfo”:{“Schema”:“cdkk”,“Table”:“t1”,“TableID”:5189,“ColumnInfo”:[{“Name”:“id”,“Type”:3},{“Name”:“pad1”,“Type”:15},{“Name”:“pad2”,“Type”:15},{“Name”:“pad3”,“Type”:15},{“Name”:“create_time”,“Type”:12},{“Name”:“age4”,“Type”:15},{“Name”:“age6”,“Type”:15},{“Name”:“age11”,“Type”:15},{“Name”:“ka”,“Type”:15}]},“PreTableInfo”:{“Schema”:“cdkk”,“Table”:“t1”,“TableID”:5189,“ColumnInfo”:[{“Name”:“id”,“Type”:3},{“Name”:“pad1”,“Type”:15},{“Name”:“pad2”,“Type”:15},{“Name”:“pad3”,“Type”:15},{“Name”:“create_time”,“Type”:12},{“Name”:“age4”,“Type”:15},{“Name”:“age6”,“Type”:15},{“Name”:“age11”,“Type”:15}]},“Query”:“ALTER TABLE t1 ADD ka
varchar(50)”,“Type”:5}"]
4、当前 changefeed 的下游 MySQL 执行DDL时(包括加字段、加索引、修改字段长度),后续所有DML语句都会阻塞,同步会延迟。 这里要注意,如果下游DDL没有执行完。tidb 就开始大批量跑数据可能导致CDC内存积压。
5、这边的排序方式使用的 memory ,还未体验 Unified Sorter 。
6、同步速度
单个同步任务往下游MySQL同步速度没有之前的快了,单个任务平均每分钟往下游同步3万-4万条数据左右,单行平均长度在1000-2000个字节左右。 而改成drainer可以跑到10万+。
尝试了调大 worker-count=64&max-txn-row=5000 ,和 mounter 为 16 也没有效果。
怎么样来提升单个同步任务的速度,有知道的小伙伴告知一下。
7、当下游执行DDL时间过长时,CDC会不断的向下游发送DDL语句直到执行完成。当重试次数达到20次以上同步任务就会报错:[CDC:ErrReachMaxTry]reach maximum try: 20,等下游DDL执行完成后重新启动任务即可。
{
“id”: “cdkk-mysql”,
“summary”: {
“state”: “stopped”,
“tso”: 429776112279617539,
“checkpoint”: “2021-12-14 15:09:20.344”,
“error”: {
“addr”: “172.16.188.120:8300”,
“code”: “CDC:ErrExecDDLFailed”,
“message”: “[CDC:ErrReachMaxTry]reach maximum try: 20”
}
}
}