Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ticdc: fix description about how cdc split update kv entries #17530

Merged
merged 7 commits into from
Jun 17, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion releases/release-8.1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ TiDB 8.1.0 为长期支持版本 (Long-Term Support Release, LTS)。

* 在之前的版本中,TiDB Lightning 的配置项 `tidb.tls` 在取值为 `"false"` 和 `""` 时的行为是相同的,在取值为 `"skip-verify"` 和 `"preferred"` 时的行为也是相同的。从 v8.1.0 开始,TiDB Lightning 对 `tidb.tls` 取值为 `"false"`、`""`、`"skip-verify"` 和 `"preferred"` 时的行为进行了区分。更多信息,请参考 [TiDB Lightning 配置参数](/tidb-lightning/tidb-lightning-configuration.md)。
* 对于设置了 `AUTO_ID_CACHE=1` 的表,TiDB 支持[中心化分配自增 ID 服务](/auto-increment.md#mysql-兼容模式)。在之前的版本中,该服务的“主”TiDB 节点在进程退出(如该 TiDB 节点重启)时会自动执行 `forceRebase` 操作,以确保自动分配的 ID 尽可能连续。然而,当设置过 `AUTO_ID_CACHE=1` 的表过多时,执行 `forceRebase` 会非常耗时,导致 TiDB 无法及时重启,甚至阻塞数据写入,影响系统可用性。因此,从 v8.1.0 起,TiDB 取消了 `forceRebase` 操作,解决了上述问题,但会造成主备切换期间部分自动分配的 ID 出现不连续。
* 在之前的版本中,TiCDC 在处理包含 `UPDATE` 变更的事务时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 `DELETE` 和 `INSERT` 两条事件。从 v8.1.0 开始,当使用 MySQL Sink 时,如果 `UPDATE` 事件的主键或者非空唯一索引的列值发生改变,且事务的 `commitTS` 小于 TiCDC 启动时从 PD 获取的当前时间戳 `thresholdTs`,TiCDC 才会将该 `UPDATE` 事件拆分为 `DELETE` 和 `INSERT` 两条事件,然后写入 Sorter 模块。该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE` 和 `INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#mysql-sink)。
* 在之前的版本中,TiCDC 在处理包含 `UPDATE` 变更的事务时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 `DELETE` 和 `INSERT` 两条事件。从 v8.1.0 开始,当使用 MySQL Sink 时,如果 `UPDATE` 变更所在事务的 `commitTS` 小于 TiCDC 启动时从 PD 获取的当前时间戳 `thresholdTs`,TiCDC 就会将该 `UPDATE` 事件拆分为 `DELETE` 和 `INSERT` 两条事件,然后写入 Sorter 模块。该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE` 和 `INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#mysql-sink)。
lidezhu marked this conversation as resolved.
Show resolved Hide resolved

### 系统变量

Expand Down
8 changes: 4 additions & 4 deletions ticdc/ticdc-behavior-change.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ COMMIT;

### MySQL Sink

从 v8.1.0 开始,当使用 MySQL Sink 时,TiCDC 在启动时会从 PD 获取当前的时间戳 `thresholdTs`,并根据时间戳的值决定是否拆分 `UPDATE` 事件:
从 v8.1.0 开始,当使用 MySQL Sink 时,TiCDC 在启动时会从 PD 获取当前的时间戳 `thresholdTS`,并根据时间戳的值决定是否拆分 `UPDATE` 事件:
lidezhu marked this conversation as resolved.
Show resolved Hide resolved

- 对于含有单条或多条 `UPDATE` 变更的事务,如果 `UPDATE` 事件的主键或者非空唯一索引的列值发生改变,且事务的 `commitTS` 小于 `thresholdTs`,在写入 Sorter 模块之前 TiCDC 会将每条 `UPDATE` 事件拆分为 `DELETE` 和 `INSERT` 两条事件。
- 对于事务的 `commitTS` 大于或等于 `thresholdTs` 的 `UPDATE` 事件,TiCDC 不会对其进行拆分。详情见 GitHub issue [#10918](https://github.com/pingcap/tiflow/issues/10918)。
- 对于含有单条或多条 `UPDATE` 变更的事务,如果该事务的 `commitTS` 小于 `thresholdTS`,在写入 Sorter 模块之前 TiCDC 会将每条 `UPDATE` 事件拆分为 `DELETE` 和 `INSERT` 两条事件。
- 对于事务的 `commitTS` 大于或等于 `thresholdTS` 的 `UPDATE` 事件,TiCDC 不会对其进行拆分。详情见 GitHub issue [#10918](https://github.com/pingcap/tiflow/issues/10918)。

该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE` 和 `INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。

Expand Down Expand Up @@ -97,7 +97,7 @@ UPDATE t SET a = 3 WHERE a = 2;

下游执行完该事务后,数据库内的记录为 `(3, 2)`,与上游数据库的记录(即 `(2, 1)` 和 `(3, 2)`)不同,即发生了数据不一致问题。

- 在引入该行为变更之后,如果该事务的 `commitTS` 小于 TiCDC 在启动时获取的 `thresholdTs`,TiCDC 会在这些 `UPDATE` 事件写入 Sorter 模块之前将其拆分为 `DELETE` 和 `INSERT` 事件,经过 Sorter 排序后下游实际执行的事件顺序如下:
- 在引入该行为变更之后,如果该事务的 `commitTS` 小于 TiCDC 在启动时获取的 `thresholdTS`,TiCDC 会在这些 `UPDATE` 事件写入 Sorter 模块之前将其拆分为 `DELETE` 和 `INSERT` 事件,经过 Sorter 排序后下游实际执行的事件顺序如下:

```sql
BEGIN;
Expand Down
Loading