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 仍在运行,只是丧失了调度能力。
建议处理方案:
- 升级到 v8.5.6:包含多个 TiCDC 稳定性修复(https://docs.pingcap.com/tidb/stable/release-8.5.6/)
- 调整 changefeed 参数:适当增大
--sink-worker-count,降低--max-txn-row-count(默认 256),避免单次大事务造成 CPU 尖峰 - 采集诊断信息:在 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
- 临时缓解:如果无法立即升级,可尝试拆分 changefeed(将大表拆到独立 changefeed)或调低
--processor-pool-size减少单节点压力
参考:
以上就是 AI 分析,
v8.5.6 有个 bind 相关的 tidb-server 的内存溢出问题,我还是推荐你升级到 855.
可以提供下 cpu 高的时候的 cdc 火焰图看看 ![]()