TiDB Bug List=

Issue

https://github.com/pingcap/tiflow/issues/11744

Root Cause

Redo log 将数据和元数据保存到外部存储。但是,redo 的数据处理模块中存在一些与错误处理相关的 Bug。当 TiCDC 集群和 redo log 外部存储之间出现网络分区故障时,可能出现:

  1. 如果写meta失败,changefeed将重新启动并尝试恢复同步过程,这是预期行为。
  2. 如果写meta成功,写数据失败,即使redo的数据处理模块已经停止,changefeed也会继续正常进行。这是非预期行为,实际上禁用了 redo log 功能,并在灾难场景中导致可能的数据不一致。

注意:网络故障的持续时间决定了这些问题是否会发生。由于 redo log 模块的指数回避机制中随机添加了抖动,所以只有当失败持续时间近似等于重试模块的超时时间(5分钟)时,才会出现写文件的概率失败。

Diagnostic Steps

  1. 部署 TiDB(上游) + TiCDC + TiDB/mysql(下游)
  2. 创建 Changefeed ,打开设置 Changefeed 配置

[consistent]

level = “eventual”

  1. 在 TiCDC 集群与 Redo 外部存储间注入约 5 分钟的网络分区故障。
  2. 上游 TiDB 有写负载的过程中,观察 TiCDC-Redo 面板的监控状态:
  • 正常情况:Redo Writer rows/s and Redo Writer bytes/s 均显示存在写负载。
  • 异常情况:Redo Writer bytes/s 显示为空,而另一个监控显示存在写负载。

Affect version

  • v6.5.10, v6.5.11
  • v7.5.2, v7.5.3, v7.5.4
  • v8.1.0, v8.1.1

Resolution

升级 TiCDC 到 v6.1.12 / v7.5.5 / v8.1.2 及之后版本

Workaround

从监控中发现这个问题后,重启 changefeed