ticdc是否有丢数据的可能性

【 TiDB 使用环境】生产环境

【 TiDB 版本】5.1.4

【遇到的问题:问题现象及影响】

1、收到了这样的告警,告警持续了几分钟
ticdc_memory_abnormal
状态:firing,级别:warning
TiCDC heap memory usage is over 10 GB
cluster: tidb-prod, instance: 127.0.0.1:8300, values:1.6023378784e+10,首次告警:2023-09-02T14:03:58

2、目标端是kafka

3、想咨询下ticdc写到kafka这个链路,有没有丢数据的可能性?常见的可能性有哪些?

这世界上就没有绝对的事情

这个可能性比较大吧

我补充下我怀疑的点:
1、数据量大时,ticdc会不会处理不过来,把数据丢了?
2、ticdc写入kafka,成功写入判断是收到kafka ack吗?

噗。。。瞎说什么大实话 :smile:

1、ticdc处理不过来的时候,只是会写入慢或者报错,但不可能丢失数据;
2、ticdc v7支持了单行校验

感谢感谢!
1、ticdc如果崩了,也不会丢吧?
2、我当前使用的版本是V5
3、ticdc写入kafka,写入成功判断是收到kafka ack吗?还是说可以配置“写入成功判断”的策略?

1、ticdc崩了,恢复时候具备断点续传能力,这个是ticdc具备的;
2、关于ack可以查看下面的截图


3、ticdc要求很高的话,建议升级到tidb v7.1.x,tidb和ticdc都会有不一样的使用体验的。

你是不是单节点cdc,建议搞三个节点有高可用

  • ticdc写到kafka这个链路,有可能出现丢数据的情况,常见的原因有以下几种:
    • ticdc端的内存不足或者OOM,导致ticdc进程异常退出或者重启。这种情况下,ticdc会尝试从上次的checkpoint继续同步数据,但是如果checkpoint间隔过长,或者checkpoint信息丢失或损坏,就有可能造成数据丢失。
    • kafka端的配置不合理或者异常,导致ticdc无法正常写入数据或者写入数据失败。这种情况下,ticdc会根据kafka的required-acks参数和重试策略来决定是否重发数据或者报错退出。如果required-acks参数设置为0(不等待任何响应),或者重试次数用尽仍然失败,就有可能造成数据丢失。
    • 网络故障或者延迟,导致ticdc和kafka之间的通信中断或者超时差不多与上面一样。

ack
required-acks参数是ticdc新版本才有的吗? V5.2版本好像没有,帮忙确认下5.2版本ack策略是什么?

丢数据,不至于吧,除非你自己的操作问题,或者你cdc单节点宕机,tso没有问题,不会丢数据

ack默认都是1