TiCDC 同步到 Kafka TSO一直不更新

【TiDB 版本】 4.0.11
【TiCDC 版本 】 4.0.11

背景:
整库以canal-json的格式往Kafka同步数据。

创建命令:
22点创建,TSO指向20点
cdc cli changefeed create --start-ts=423484147839795973 --sink-uri=“kafka://kafka.ld-hadoop.com:29092/dw_tidb_binlog_search_sync_risk” --changefeed-id=“kj-search-sync-risk” --config=/data/cdc_file/kj-search-sync-risk.toml
423484147839795973 为 19:57

配置文件:
case-sensitive = true
enable-old-value = true
[filter]
rules = [‘search_sync_risk.’]
[mounter]
worker-num = 16
[sink]
dispatchers = [
{matcher = ['search_sync_risk.
’], dispatcher = “table”},
]
protocol = “canal-json”

[cyclic-replication]
enable = false
replica-id = 1
sync-ddl = true

运行一段时间后发现 checkpoint-ts 为 423484455360921603 (20:16),一直不更新。但是 Kafka 仍然正常在进数据。

重启同步任务后报错:
“[CDC:ErrKafkaFlushUnfished]flush not finished before producer close”

这种情况正常吗? checkpoint-ts 更新逻辑是什么样的啊。

  1. 报错的问题,可以先参考下这个帖子执行下 resume 操作看能不能恢复
    ticdc同步到下游kafka任务报错
  2. 另外可以提供下完整的从创建任务到现在的 ticdc 日志看下

resume 当前没有恢复,就直接重建了。

目前测试下来,当同步到Kafka时,如果TSO往前指。

只有当数据完全同步到Kafka后 checkpoint-ts 才会变化。

TSO 往前指是什么?是指指定一个比当前时间(创建任务的时间)更早的时间吗?
这个指定的 TSO 会超过 gc safe-point 时间么

是的,比如4点创建同步任务 --start-ts 指定为3点开始,只有等存量数据数据全部同步到kafka之后。 checkpoint-ts 才会变化。

但是昨天晚上23点重建同步任务 --start-ts 指定为19:57,其中checkpoint-ts有一次变化为 20:16。

所以想了解一下往 kafka 同步有存量数据时 checkpoint-ts 更新逻辑。

这边GC设置24小时,一般不会超过24小时的。

这边找研发同学问了一下
同步存量数据的时候,checkpoint 一直不变,直到同步完存量数据才开始更新,这个是符合预期的,因为目前同步存量数据的时候,是通过扫描 region 的 mvcc 得到的,需要等待历史数据全部扫完才能往下推 checkpoint ,这部分的话有优化的空间,后续会有计划进行优化的。

同步完存量数据,继续同步增量数据的时候,checkpoint 更新机制比较复杂,与很多模块都有关系,没有一个明确的固定频率。TiCDC 内部是会 100ms 刷新一次 checkpoint ,但是不意味着 100ms 一定会更新这个值,checkpoint 的更新还和事务大小,下游类型等都有关系,涉及的内容比较多。

1 个赞

非常感谢

:handshake:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。