两节点cdc 内存使用极不均匀

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.0.4

【遇到的问题:问题现象及影响】
集群有两个cdc节点,两节点的内存使用极为不均匀。
分别A=25%,B=92%

【附件:截图/日志/监控】

是一直都是这样的吗

是的,一直是B机器内存占用比较大,现在到达92%了


相关日志有吗

上面的问题,确认下下述信息:

  1. 当前 cdc server 是独占服务器部署,还是混合部署
  2. cdc 的下游是 kafka 还是 mysql 或 tidb
  3. 按照生产环境的要求配置,TiCDC 的内存需要 64 G 以上

[changefeed.go:695] [“apply job”] [job=“ID:23497, Type:add column, State:done, SchemaState:public, SchemaID:14812, TableID:14840, RowCount:0, ArgLen:0, start time: 2022-12-27 14:45:48.199 +0800 CST, Err:, ErrCount:0, SnapshotVersion:0”]

  1. cdc 机器为独占机器,买的云服务的ecs机器,配置 8c 32G
  2. cdc 的下游是 kafka

日志:
脱敏了表名、ErrCount:0 的ddl
cdc_no_ddl_no_create_no_Err.log.tar.gz (5.9 MB)

两个cdc节点的内存都是一样的大小吗?然后实际使用的内存不均衡

如果持续时间比较的长,你可以查看一下服务进程或者业务,是哪些服务在使用这个节点。

是的,内存都一样

内存率使用高的节点(B节点),是不是相对应的同步任务中,有变更数据量特别大的表?

当前集群共11个changefeed分布为:
A节点:2个 (这两个changefeedB节点也有)
B节点(owner):11个(全部changefeed)

变更数据量,暂未统计

可能会跟这个有关系,数据变更频繁的表所在的changefeed所在的节点,肯定比变更不频繁的消耗的内存要少,查查看吧
看看两个节点的changefeed所负责的表,是不是包含热点表,有的话,热点表有没有差异(个数,数据变更频繁度),尽量均衡些

嗯嗯,没找到官方有调度任务changefeed 子task的命令。 @Billmay表妹

最终下掉几个changefeed后,内存使用率下来了

根本原因初步看是changefeed 任务调度不均匀导致的系统资源占用不均匀。

可以根据表的热度来创建changefeed,使用表过滤功能,尽可能使每个changefeed负责的表保持均衡

有办法根据表热度指定changefeed由那个capture调度么。没找到这个命令~

https://docs.pingcap.com/tidb/stable/ticdc-manage-changefeed

可以看下这里的内容介绍

第一种方式.:
按表热度重新创建同步任务
第二种方式:
1. pause changefeed;
2. 更改配置文件(按表热度更改表的过滤规则)
3. update changefeed;
4. resume changefeed;

5.0版本和6.5版本好像命令不一样,5.0是指定pd节点,6.5指定的–server。这样改动区别是那些呢?

  • 5.0
cdc cli changefeed create --pd=http://10.0.10.25:2379 --sink-uri="mysql://root:123456@127.0.0.1:3306/" --changefeed-id="simple-replication-task" --sort-engine="unified"
  • 6.5
cdc cli changefeed create --server=http://10.0.10.25:8300 --sink-uri="mysql://root:123456@127.0.0.1:3306/" --changefeed-id="simple-replication-task"