cdc changefeed删除后,仍然有cdc processor checkpoint tso no change报警,该如何排查

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 使用环境】生产环境
【TiDB 版本】6.5.1
【部署方式】云上部署(什么云)/机器部署
【操作系统/CPU 架构/芯片详情】
【机器部署详情】CPU大小/内存大小/磁盘大小
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

1 个赞
  • 检查 Changefeed 残留
  • 执行 cdc cli changefeed list --server=http://<cdc-addr>:8300 确认目标 ID 是否仍存在。
  • cdc cli changefeed query -c <feed-id> --server=... 查看状态,若存在则强制删除:cdc cli changefeed remove -c <feed-id> --force --server=...
  • 排查 Processor 进程残留
  • 查看 TiCDC 日志(搜索 processor running for changefeed),确认是否有僵尸 processor。
  • 执行 ps aux | grep cdc 并核对进程参数中的 feed-id,异常进程直接 kill。
  • 核对 PD 元数据
  • pd-ctl 检查 TiCDC 注册的服务:pd-ctl service list | grep ticdc,删除残留的 service safepoint。
3 个赞

对,确认 changefeed 状态 > 清理残留进程 > 清理 PD 元数据 > 处理监控缓存

2 个赞

是不是在上面还有事务呢

这个问题的本质是 TiCDC 在删除 changefeed 时,没有彻底清理 PD 中的元数据和本地节点的状态文件,导致监控系统依然能采集到旧的指标。通过清理本地状态、重启服务和强制删除 PD 元数据,可以彻底解决这个问题。

1 个赞

先pause cdc,后删除的

请问清理本地状态、强制删除 PD 元数据具体怎么操作?

[tidb~]$ tiup ctl:v6.1.2 pd -u http://10.1*.5*.29:2379 service list
Starting component ctl: /home/tidb/.tiup/components/ctl/v6.1.2/ctl pd -u http://10.1

5*.2*9:2379 service list
{
“service_gc_safe_points”: [
{
“service_id”: “gc_worker”,
“expired_at”: 9223372036854775807,
“safe_point”: 463975945229828096
},
{
“service_id”: “ticdc”,
“expired_at”: 1770187066,
“safe_point”: 464021268380778514
}
],
“gc_safe_point”: 463975945229828096
}

原先有7个cdc同步,下线了3个cdc(先pause,后remove), 剩余4个cdc状态正常,旧的changefeed仍然有报警

低版本我记得有个 bug,绕过方法:

  1. 创建一个同名的任务,可以不同步任何东西
  2. 删除这个同名任务。

这样应该能清理。你试试。

1 个赞

Changefeed 未真正清理干净, 告警规则未适配清理逻辑PD 中残留 CDC 相关调度信息

感谢!tidb集群版本是v6.1.2, 按照你的办法创建同名任务,观察一会儿后直接删掉后,不报警了 。

怎么创建的同名任务,是将原来的任务删掉吗?还是有其他的替代方案呢