From 01c658c523767ae74f3f78dbbd4f5aaf200b5851 Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 16:47:14 +0800 Subject: [PATCH 01/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index a9f46ce2ce80..98cb9c71e5ae 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -109,4 +109,10 @@ fn checksum(columns) { > **注意:** > > - 开启 Checksum 校验功能后,DECIMAL 和 UNSIGNED BIGINT 类型的数据会被转换为字符串类型。因此在下游消费者代码中需要将其转换为对应的数值类型,然后进行 Checksum 相关计算。 -> - Delete 事件只含有 Handle Key 列的内容,而 Checksum 是基于所有列计算的,所以 Delete 事件不参与到 Checksum 的校验中。 \ No newline at end of file +> - Delete 事件只含有 Handle Key 列的内容,而 Checksum 是基于所有列计算的,所以 Delete 事件不参与到 Checksum 的校验中。 + +## 兼容性问题 + +v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: + +使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.4.0 的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况,主要原因是 BR 在恢复数据的时候如果发现被恢复的表 ID 已经在目标集群上被占用,会改写表 ID,但是没有同时改写 Checksum。 \ No newline at end of file From 089dbca84953d42cc953670dc7e17e13740b0590 Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 17:01:08 +0800 Subject: [PATCH 02/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 98cb9c71e5ae..fdd6d756f0b6 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -115,4 +115,4 @@ fn checksum(columns) { v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: -使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.4.0 的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况,主要原因是 BR 在恢复数据的时候如果发现被恢复的表 ID 已经在目标集群上被占用,会改写表 ID,但是没有同时改写 Checksum。 \ No newline at end of file +使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.4.0 的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From bf39f268f45aaf25cf5da121ba27730c4754fe4c Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 17:07:39 +0800 Subject: [PATCH 03/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index fdd6d756f0b6..0f19d5e9a4c1 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -115,4 +115,4 @@ fn checksum(columns) { v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: -使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.4.0 的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file +使用 BR 工具备份 v8.3.0 的数据,恢复到其他版本的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From 794464548866a48641a7416417019f69e0be7ea2 Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 17:50:37 +0800 Subject: [PATCH 04/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 0f19d5e9a4c1..3f7d7b7b1cc8 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -61,9 +61,11 @@ TiCDC 默认关闭单行数据的 Checksum 校验功能。若要在开启此功 ## Checksum 算法 ++Checksum 算法演进,只影响 TiCDC 内部对 Checksum 的校验过程,不影响下游 Kafka Consumer 校验 Checksum 的规则。 + ### Checksum V1 -在 v8.4.0 之前,TiDB 和 TiCDC 采用 Checksum v1 算法进行 Checksum 计算和校验。 +从 v7.1.0 到 v8.2.0,TiDB 和 TiCDC 采用 Checksum v1 算法进行 Checksum 计算和校验。 在启用单行数据 Checksum 正确性校验功能后,TiDB 会使用 CRC32 算法计算每行数据的 Checksum 值,并将这个值与该行数据一并存储在 TiKV 中。随后,TiCDC 从 TiKV 读取这些数据,并使用相同的算法重新计算 Checksum,如果得到的 Checksum 值与 TiDB 写入的 Checksum 值相同,则表明数据在从 TiDB 到 TiCDC 的传输过程中是正确的。 @@ -71,9 +73,13 @@ TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取 ### Checksum V2 -从 v8.4.0 开始,TiDB 和 TiCDC 引入 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。 +在 v8.3.0 版本 TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。 + +对于 v8.4.0 及之后新创建的集群,或从之前版本升级到 v8.4.0 的集群,启用单行数据 Checksum 正确性校验功能后,TiDB 默认使用 Checksum V2 算法进行 Checksum 计算和校验。TiCDC 支持同时处理 V1 和 V2 两种 Checksum。 + +### Checksum V3 -对于 v8.4.0 及之后新创建的集群,或从之前版本升级到 v8.4.0 的集群,启用单行数据 Checksum 正确性校验功能后,TiDB 默认使用 Checksum V2 算法进行 Checksum 计算和校验。TiCDC 支持同时处理 V1 和 V2 两种 Checksum。该变更仅影响 TiDB 和 TiCDC 内部实现,不影响下游 Kafka consumer 的 Checksum 计算校验方法。 +从 v8.4.0 版本之后,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法中,由于包含 Table ID 信息,在 BR 恢复场景下由于改写 Table ID 导致的 Old Value 部分 Checksum 无法被校验的问题。 ## Checksum 计算规则 From 6268ececed71bdb562353a53a95cd54c962e79fd Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 18:07:43 +0800 Subject: [PATCH 05/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 3f7d7b7b1cc8..4deced8bbf36 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -75,8 +75,6 @@ TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取 在 v8.3.0 版本 TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。 -对于 v8.4.0 及之后新创建的集群,或从之前版本升级到 v8.4.0 的集群,启用单行数据 Checksum 正确性校验功能后,TiDB 默认使用 Checksum V2 算法进行 Checksum 计算和校验。TiCDC 支持同时处理 V1 和 V2 两种 Checksum。 - ### Checksum V3 从 v8.4.0 版本之后,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法中,由于包含 Table ID 信息,在 BR 恢复场景下由于改写 Table ID 导致的 Old Value 部分 Checksum 无法被校验的问题。 @@ -119,6 +117,11 @@ fn checksum(columns) { ## 兼容性问题 +### 升级场景兼容性 + +升级集群时,需要先升级 TiCDC,后升级 TiDB。升级过程中,TiCDC 处于高版本,TiDB 处于低版本时,支持处理由低版本 TiDB 写入的 Checksum。升级完成后,应该保证 TiDB 和 TiCDC 使用相同的版本的 Checksum 校验算法。 + +### BR 恢复场景兼容性 v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: 使用 BR 工具备份 v8.3.0 的数据,恢复到其他版本的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From a9151a138f48c8eb2c67aa8c7d93eb3ef201d50a Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 18:12:13 +0800 Subject: [PATCH 06/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 4deced8bbf36..e704fe65f47c 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -61,7 +61,7 @@ TiCDC 默认关闭单行数据的 Checksum 校验功能。若要在开启此功 ## Checksum 算法 -+Checksum 算法演进,只影响 TiCDC 内部对 Checksum 的校验过程,不影响下游 Kafka Consumer 校验 Checksum 的规则。 +Checksum 算法演进,只影响 TiCDC 内部对 Checksum 的校验过程,不影响下游 Kafka Consumer 校验 Checksum 的规则。 ### Checksum V1 From 40c9172bc24f8b7e1243799af275b78112c07124 Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Thu, 5 Dec 2024 18:29:51 +0800 Subject: [PATCH 07/14] add a description about checksum compatibility --- ticdc/ticdc-integrity-check.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index e704fe65f47c..5fb432680f19 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -73,11 +73,11 @@ TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取 ### Checksum V2 -在 v8.3.0 版本 TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。 +在 v8.3.0 版本 TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。Checksum V2 算法基于 Key-Value 对计算 Bytes 级别的 Checksum 值。Key 由表 ID 和行 ID 两部分组成。 ### Checksum V3 -从 v8.4.0 版本之后,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法中,由于包含 Table ID 信息,在 BR 恢复场景下由于改写 Table ID 导致的 Old Value 部分 Checksum 无法被校验的问题。 +从 v8.4.0 版本之后,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法中,由于包含 Table ID 信息,在 BR 恢复场景下由于改写 Table ID 导致的 Old Value 部分 Checksum 无法被校验的问题。Checksum V3 基于表 ID 和 Value 部分计算 Bytes 级别的 Checksum 值。 ## Checksum 计算规则 @@ -124,4 +124,4 @@ fn checksum(columns) { ### BR 恢复场景兼容性 v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: -使用 BR 工具备份 v8.3.0 的数据,恢复到其他版本的 TiDB 集群,在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file +使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.3.0 及更高版本的 TiDB 集群。在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。具体原因是,在 BR 恢复数据的时候,如果发现当前被恢复的表的 ID 已经在下游目标集群上被占用,就会改写表 ID,但是没有改写 Checksum,从而导致 Changefeed 内部校验数据的时候使用的表 ID 和数据在老集群上被写入时候的表 ID 不一致,最终导致校验失败。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From 680b633c2a301efd8ac8fa057bb6b643787c9c29 Mon Sep 17 00:00:00 2001 From: 3AceShowHand Date: Tue, 10 Dec 2024 18:10:14 +0800 Subject: [PATCH 08/14] fix the line break --- ticdc/ticdc-integrity-check.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 5fb432680f19..44c05268eac0 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -122,6 +122,7 @@ fn checksum(columns) { 升级集群时,需要先升级 TiCDC,后升级 TiDB。升级过程中,TiCDC 处于高版本,TiDB 处于低版本时,支持处理由低版本 TiDB 写入的 Checksum。升级完成后,应该保证 TiDB 和 TiCDC 使用相同的版本的 Checksum 校验算法。 ### BR 恢复场景兼容性 + v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: 使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.3.0 及更高版本的 TiDB 集群。在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。具体原因是,在 BR 恢复数据的时候,如果发现当前被恢复的表的 ID 已经在下游目标集群上被占用,就会改写表 ID,但是没有改写 Checksum,从而导致 Changefeed 内部校验数据的时候使用的表 ID 和数据在老集群上被写入时候的表 ID 不一致,最终导致校验失败。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From af45552932a423da5dea443923da84a521bcc631 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:44:09 +0800 Subject: [PATCH 09/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 44c05268eac0..5c4680c47d4e 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -61,7 +61,7 @@ TiCDC 默认关闭单行数据的 Checksum 校验功能。若要在开启此功 ## Checksum 算法 -Checksum 算法演进,只影响 TiCDC 内部对 Checksum 的校验过程,不影响下游 Kafka Consumer 校验 Checksum 的规则。 +本节介绍 TiCDC 中 Checksum 算法的演进。不同的 Checksum 算法版本会影响 TiCDC 内部的 Checksum 校验过程,但不会影响下游 Kafka Consumer 对 Checksum 的校验规则。 ### Checksum V1 From 1e429c60f3eed4a8be875747d8a25ad78bdb7efe Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:44:21 +0800 Subject: [PATCH 10/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 5c4680c47d4e..251ef36c4e69 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -65,7 +65,7 @@ TiCDC 默认关闭单行数据的 Checksum 校验功能。若要在开启此功 ### Checksum V1 -从 v7.1.0 到 v8.2.0,TiDB 和 TiCDC 采用 Checksum v1 算法进行 Checksum 计算和校验。 +在 v7.1.0 到 v8.2.0 及其之间的版本中,TiDB 和 TiCDC 采用 Checksum v1 算法进行 Checksum 计算和校验。 在启用单行数据 Checksum 正确性校验功能后,TiDB 会使用 CRC32 算法计算每行数据的 Checksum 值,并将这个值与该行数据一并存储在 TiKV 中。随后,TiCDC 从 TiKV 读取这些数据,并使用相同的算法重新计算 Checksum,如果得到的 Checksum 值与 TiDB 写入的 Checksum 值相同,则表明数据在从 TiDB 到 TiCDC 的传输过程中是正确的。 From 614fdc79f2ea425df91d14c7bd67a3d1256ec266 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:44:55 +0800 Subject: [PATCH 11/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 251ef36c4e69..14283f4ae332 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -73,7 +73,7 @@ TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取 ### Checksum V2 -在 v8.3.0 版本 TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。Checksum V2 算法基于 Key-Value 对计算 Bytes 级别的 Checksum 值。Key 由表 ID 和行 ID 两部分组成。 +在 v8.3.0 中,TiDB 和 TiCDC 使用 Checksum V2 算法,解决了 Checksum V1 在执行 `ADD COLUMN` 或 `DROP COLUMN` 后无法正确校验 Update 或 Delete 事件中 Old Value 数据的问题。Checksum V2 算法基于 Key-Value 对计算字节级别的 Checksum 值,其中 Key 由表 ID 和行 ID 组成。 ### Checksum V3 From ebd3e7718f4e4c0b7eeee1158f27ef982664c6b7 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:45:09 +0800 Subject: [PATCH 12/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 14283f4ae332..9809e1f0cd5a 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -77,7 +77,7 @@ TiCDC 将数据编码成特定格式并发送至 Kafka。Kafka Consumer 读取 ### Checksum V3 -从 v8.4.0 版本之后,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法中,由于包含 Table ID 信息,在 BR 恢复场景下由于改写 Table ID 导致的 Old Value 部分 Checksum 无法被校验的问题。Checksum V3 基于表 ID 和 Value 部分计算 Bytes 级别的 Checksum 值。 +从 v8.4.0 开始,TiDB 和 TiCDC 使用 Checksum V3 算法。该算法解决了 Checksum V2 算法在 [BR](/br/backup-and-restore-overview.md) 恢复场景下,由于 Table ID 改写导致 Old Value Checksum 校验失败的问题。Checksum V3 算法基于表 ID 和 Value 部分计算字节级别的 Checksum 值。 ## Checksum 计算规则 From 6ea30aef7cb6ed20a04c788b06ca333971627ef9 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:46:26 +0800 Subject: [PATCH 13/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index 9809e1f0cd5a..e5c4a12cb8d3 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -123,6 +123,6 @@ fn checksum(columns) { ### BR 恢复场景兼容性 -v8.3.0 和 v8.4.0 的 Checksum 功能有如下兼容性问题: +在 v8.3.0 和 v8.4.0 中,Checksum 功能存在以下兼容性问题: 使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.3.0 及更高版本的 TiDB 集群。在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。具体原因是,在 BR 恢复数据的时候,如果发现当前被恢复的表的 ID 已经在下游目标集群上被占用,就会改写表 ID,但是没有改写 Checksum,从而导致 Changefeed 内部校验数据的时候使用的表 ID 和数据在老集群上被写入时候的表 ID 不一致,最终导致校验失败。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file From fea533ba780ba7bac546721c58fb6212606baf89 Mon Sep 17 00:00:00 2001 From: Ling Jin <7138436+3AceShowHand@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:47:09 +0800 Subject: [PATCH 14/14] Update ticdc/ticdc-integrity-check.md Co-authored-by: Aolin --- ticdc/ticdc-integrity-check.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ticdc/ticdc-integrity-check.md b/ticdc/ticdc-integrity-check.md index e5c4a12cb8d3..afa5cd166c1d 100644 --- a/ticdc/ticdc-integrity-check.md +++ b/ticdc/ticdc-integrity-check.md @@ -125,4 +125,6 @@ fn checksum(columns) { 在 v8.3.0 和 v8.4.0 中,Checksum 功能存在以下兼容性问题: -使用 BR 工具备份 v8.3.0 的数据,恢复到 v8.3.0 及更高版本的 TiDB 集群。在 Changefeed 同步过程中如果遇到了 Update 和 Delete 事件,在 TiCDC 内部可能发生校验 Old Value 的 Checksum 失败的情况。具体原因是,在 BR 恢复数据的时候,如果发现当前被恢复的表的 ID 已经在下游目标集群上被占用,就会改写表 ID,但是没有改写 Checksum,从而导致 Changefeed 内部校验数据的时候使用的表 ID 和数据在老集群上被写入时候的表 ID 不一致,最终导致校验失败。如果存在上述使用场景,需要关闭 changefeed 的 checksum 校验功能。 \ No newline at end of file +当使用 BR 工具备份 v8.3.0 数据并恢复到 v8.3.0 或之后版本的 TiDB 集群时,如果在 Changefeed 同步过程中遇到 Update 或 Delete 事件,TiCDC 可能会在校验 Old Value 时失败。原因是在 BR 恢复数据时,如果恢复的表的 ID 已在目标集群中被占用,BR 会重新分配表 ID,但 Checksum 值不会更新。这导致 TiCDC 在校验数据时,使用的表 ID 与数据在源集群中写入时的表 ID 不一致,最终导致校验失败。 + +如果遇到此问题,建议[关闭 Changefeed 的 Checksum 校验功能](#关闭功能)。 \ No newline at end of file