TiCDC长时间卡住不同步

TiCDC长时间卡住不同步的可能原因和解决方案

TiCDC长时间卡住不同步可能是由于多种原因造成的,以下是一些可能的原因以及相应的解决方案:

  1. 上游未提交事务:如果上游有运行时间较长的未提交事务,TiCDC会等待这些事务提交后再继续同步数据,这可能导致同步延迟2
  2. 内部处理能力不足:当TiCDC的内部处理能力不足时,可能会出现同步任务报错,如ErrBufferReachLimit。这种情况下,可以尝试调整TiCDC的配置,提高其处理能力2
  3. 内存溢出:如果TiCDC的内部处理能力不足或下游吞吐能力不足,可能会出现内存溢出(OOM)。可以通过增加资源或优化应用逻辑来解决这个问题2
  4. 事务超时:TiDB有事务超时的机制,当事务运行超过max-txn-ttl后,会被TiDB强制回滚。TiCDC遇到未提交的事务,会等待其提交后再继续同步其数据,因此会出现同步延迟2
  5. 物理导入模式和BR恢复数据:如果在使用TiCDC同步的表上使用了TiDB Lightning物理导入模式和BR恢复数据,可能会导致TiCDC同步出现卡顿甚至卡住。在这种情况下,应该避免在使用TiCDC同步的表上使用这些操作,或者在使用后重新配置TiCDC同步任务2
  6. DDL操作:如果上游执行了有损DDL操作,TiCDC会将一条新旧数据相同的DML事件同步到下游。从TiCDC v7.1.0开始,TiCDC会过滤掉这些无用的DML事件,不再将它们同步到下游2
  7. 同步任务重启:如果同步任务停止后重新启动,可能会出现同步延迟。这是因为TiCDC需要扫描TiKV中数据的历史版本,待扫描完毕后,才能继续推进复制过程,扫描过程可能长达数分钟到数十分钟2

解决步骤

  1. 监控和诊断:首先,应监控TiCDC的状态,特别是checkpoint时间与当前时间的对比,以便及时发现问题3
  2. 重启TiCDC:如果确认TiCDC已经卡住,可以尝试重启TiCDC服务,以清除可能的临时故障或状态异常3
  3. 调整配置:根据具体情况调整TiCDC的配置,如增加资源、优化处理能力等,以改善同步性能2
  4. 增量恢复:如果因为大事务导致同步中断,可以记录因大事务而终止的changefeed的checkpoint-ts,将这个TSO作为BR增量备份的–lastbackupts,并执行增量备份。增量备份结束后,可以在BR日志输出中找到BackupTS,执行增量恢复。然后建立一个新的changefeed,从BackupTS开始同步任务,删除旧的changefeed2
  5. 避免不适配操作:避免在使用TiCDC同步的表上使用TiDB Lightning物理导入模式和BR恢复数据,以免导致未知的错误2
  6. 检查数据一致性:在恢复同步任务后,应检查上下游数据的一致性,确保数据正确无误2