Skip to content

Commit

Permalink
ticdc: update cdc gc service doc and failed changefeed faq (#16388)
Browse files Browse the repository at this point in the history
  • Loading branch information
sdojjy committed Feb 23, 2024
1 parent 21e3ded commit c021753
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
7 changes: 4 additions & 3 deletions ticdc/ticdc-changefeed-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,16 @@ Changefeed 是 TiCDC 中的单个同步任务。Changefeed 将一个 TiDB 集群

以上状态流转图中的状态说明如下:

- Normal:同步任务正常进行,checkpoint-ts 正常推进。
- Normal:同步任务正常进行,checkpoint-ts 正常推进。处于这个状态的 changefeed 会阻塞 GC 推进。
- Stopped:同步任务停止,由于用户手动暂停 (pause) changefeed。处于这个状态的 changefeed 会阻挡 GC 推进。
- Warning:同步任务报错,由于某些可恢复的错误导致同步无法继续进行。处于这个状态的 changefeed 会不断尝试继续推进,直到状态转为 Normal。最大重试时间为 30 分钟,超过该时间,changefeed 会进入 failed 状态。 处于这个状态的 changefeed 会阻挡 GC 推进。
- Finished:同步任务完成,同步任务进度已经达到预设的 TargetTs。处于这个状态的 changefeed 不会阻挡 GC 推进。
- Failed:同步任务失败。处于这个状态的 changefeed 不会自动尝试恢复。为了让用户有足够的时间处理故障,处于这个状态的 changefeed 会阻塞 GC 推进,阻塞时长为 `gc-ttl` 所设置的值,其默认值为 24 小时。在此期间,如果导致任务失败的问题被修复,用户可以手动恢复 changefeed。超过了 `gc-ttl` 时长后,如果 changefeed 仍然处于 Failed 状态,则同步任务无法恢复。

> **注意:**
>
> 如果 changefeed 遭遇错误码为 ErrGCTTLExceeded, ErrSnapshotLostByGC 或者 ErrStartTsBeforeGC 类型的错误,则不再阻塞 GC 推进。
>
> - 如果是因为 changefeed 阻塞了 GC, 则 changefeed 最多阻塞 GC 推进 `gc-ttl` 所指定的时长,超过该时长后,changefeed 会被设置成 `failed` 状态,错误类型为 `ErrGCTTLExceeded`,不再阻塞 GC 推进。
> - 如果 changefeed 遭遇错误码为 `ErrGCTTLExceeded``ErrSnapshotLostByGC` 或者 `ErrStartTsBeforeGC` 类型的错误,则不再阻塞 GC 推进。
以上状态流转图中的编号说明如下:

Expand Down
10 changes: 8 additions & 2 deletions ticdc/ticdc-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ cdc cli changefeed list --server=http://127.0.0.1:8300
启动 TiCDC server 时可以通过 `gc-ttl` 指定 GC safepoint 的 TTL,也可以[通过 TiUP 修改](/ticdc/deploy-ticdc.md#使用-tiup-变更-ticdc-集群配置) TiCDC 的 `gc-ttl`,默认值为 24 小时。在 TiCDC 中这个值有如下两重含义:

- 当 TiCDC 服务全部停止后,由 TiCDC 在 PD 所设置的 GC safepoint 保存的最长时间。
- TiCDC 中某个同步任务中断或者被手动停止时所能停滞的最长时间,若同步任务停滞时间超过 `gc-ttl` 所设置的值,那么该同步任务就会进入 `failed` 状态,无法被恢复,并且不会继续影响 GC safepoint 的推进
- TiCDC 的 GC safepoint 阻塞 TiKV GC 数据时,`gc-ttl` 表示 TiCDC 同步任务的最大同步延迟,若同步任务延迟超过 `gc-ttl` 所设置的值,那么该同步任务就会进入 `failed` 状态,并报 `ErrGCTTLExceeded` 错误,无法被恢复,不再阻塞 GC safepoint 推进

以上第二种行为是在 TiCDC v4.0.13 版本及之后版本中新增的。目的是为了防止 TiCDC 中某个同步任务停滞时间过长,导致上游 TiKV 集群的 GC safepoint 长时间不推进,保留的旧数据版本过多,进而影响上游集群性能。

Expand All @@ -76,7 +76,13 @@ TiCDC 服务启动后,如果有任务开始同步,TiCDC owner 会根据所

如果该同步任务停滞的时间超过了 `gc-ttl` 指定的时长,那么该同步任务就会进入 `failed` 状态,并且无法被恢复,PD 对应的 service GC safepoint 就会继续推进。

TiCDC 为 service GC safepoint 设置的存活有效期为 24 小时,即 TiCDC 服务中断 24 小时内恢复能保证数据不因 GC 而丢失。
TiCDC 为 service GC safepoint 设置的默认存活有效期为 24 小时,即 TiCDC 服务中断 24 小时内恢复能保证 TiCDC 继续同步所需的数据不因 GC 而丢失。

## Failed 同步任务失败后如何恢复?

1. 通过 `cdc cli changefeed query` 查询同步任务的错误信息,尽快修复错误。
2. 调大 `gc-ttl` 的值,给修复错误留出时间,确保错误修复后不会因为同步延迟超过 `gc-ttl` 而导致同步任务进入 `failed` 状态。
3. 在评估系统影响后,调大 TiDB 的 [tidb_gc_life_time](/system-variables.md#tidb_gc_life_time-从-v50-版本开始引入) 的值以阻止 GC、保留数据,确保错误修复后不会因为 GC 清理数据而导致同步任务进入 `failed` 状态。

## 如何理解 TiCDC 时区和上下游数据库系统时区之间的关系?

Expand Down

0 comments on commit c021753

Please sign in to comment.