ticdc cpu一路攀升,直到耗尽

AI 问题分析
从 v7.1.3 升级到 v8.5.3 后,TiCDC 到 TiDB 下游的 changefeed 出现 CPU 持续攀升,这是 v8.x 版本 TiDB sink 的事务编码和冲突校验逻辑变化导致的已知行为。Kafka sink 不受影响是因为它不涉及 TiDB 批量写入校验。

capture tables 归零原因
CPU 耗尽后 TiCDC 节点无法向 Etcd 发送心跳维持 session,capture 被判定失活,其负责的表所有权自动转移到其他节点。进程未崩溃是因为底层 goroutine 仍在运行,只是丧失了调度能力。

建议处理方案

  1. 升级到 v8.5.6:包含多个 TiCDC 稳定性修复(https://docs.pingcap.com/tidb/stable/release-8.5.6/)
  2. 调整 changefeed 参数:适当增大 --sink-worker-count,降低 --max-txn-row-count(默认 256),避免单次大事务造成 CPU 尖峰
  3. 采集诊断信息:在 CPU 飙升期间执行以下命令,将结果提供给我们以便进一步定位:
# goroutine profile
curl -s http://<cdc-ip>:8300/debug/pprof/goroutine?debug=1 > goroutine.txt
# CPU profile(采样 30 秒) 
curl -s http://<cdc-ip>:8300/debug/pprof/profile?seconds=30 > cpu.prof
  1. 临时缓解:如果无法立即升级,可尝试拆分 changefeed(将大表拆到独立 changefeed)或调低 --processor-pool-size 减少单节点压力

参考


以上就是 AI 分析,
v8.5.6 有个 bind 相关的 tidb-server 的内存溢出问题,我还是推荐你升级到 855.
可以提供下 cpu 高的时候的 cdc 火焰图看看 :thinking: