Skip to content

Commit

Permalink
ticdc: add output-raw-change-event parameter and update ticdc-behavio…
Browse files Browse the repository at this point in the history
…r-change (#17699) (#18033)
  • Loading branch information
ti-chi-bot authored Jul 22, 2024
1 parent 58661a6 commit 937628f
Show file tree
Hide file tree
Showing 12 changed files with 161 additions and 63 deletions.
2 changes: 1 addition & 1 deletion TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@
- [双向复制](/ticdc/ticdc-bidirectional-replication.md)
- [单行数据正确性校验](/ticdc/ticdc-integrity-check.md)
- [主从集群一致性读和数据校验](/ticdc/ticdc-upstream-downstream-check.md)
- [TiCDC 行为变更说明](/ticdc/ticdc-behavior-change.md)
- [拆分 UPDATE 事件行为说明](/ticdc/ticdc-split-update-behavior.md)
- 监控告警
- [基本监控指标](/ticdc/ticdc-summary-monitor.md)
- [详细监控指标](/ticdc/monitor-ticdc.md)
Expand Down
2 changes: 1 addition & 1 deletion releases/release-6.5.10.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ TiDB 版本:6.5.10

## 兼容性变更

- 在之前的版本中,TiCDC 在处理包含 `UPDATE` 变更的事务时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 `DELETE``INSERT` 两条事件。从 v6.5.10 开始,当使用 MySQL Sink 时,如果 `UPDATE` 变更所在事务的 `commitTS` 小于对应表开始向下游同步数据时从 PD 获取的当前时间戳 `thresholdTS`,TiCDC 就会将该 `UPDATE` 事件拆分为 `DELETE``INSERT` 两条事件,然后写入 Sorter 模块。该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE``INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。更多信息,请参考[用户文档](https://docs.pingcap.com/zh/tidb/v6.5/ticdc-behavior-change#mysql-sink)[#10918](https://github.com/pingcap/tiflow/issues/10918) @[lidezhu](https://github.com/lidezhu)
- 在之前的版本中,TiCDC 在处理包含 `UPDATE` 变更的事务时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 `DELETE``INSERT` 两条事件。从 v6.5.10 开始,当使用 MySQL Sink 时,如果 `UPDATE` 变更所在事务的 `commitTS` 小于对应表开始向下游同步数据时从 PD 获取的当前时间戳 `thresholdTS`,TiCDC 就会将该 `UPDATE` 事件拆分为 `DELETE``INSERT` 两条事件,然后写入 Sorter 模块。该行为变更解决了由于 TiCDC 接收到的 `UPDATE` 事件顺序可能不正确,导致拆分后的 `DELETE``INSERT` 事件顺序也可能不正确,从而引发下游数据不一致的问题。更多信息,请参考[用户文档](https://docs.pingcap.com/zh/tidb/v6.5/ticdc-split-update-behavior#mysql-sink-拆分-update-事件行为说明)[#10918](https://github.com/pingcap/tiflow/issues/10918) @[lidezhu](https://github.com/lidezhu)
- 使用 TiDB Lightning 的严格格式 `strict-format` 导入 CSV 文件时,必须设置行分隔符 [#37338](https://github.com/pingcap/tidb/issues/37338) @[lance6716](https://github.com/lance6716)

## 改进提升
Expand Down
2 changes: 1 addition & 1 deletion releases/release-6.5.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ TiDB 版本:6.5.3

### 行为变更

- TiCDC 在处理 Update 事件时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 Delete 和 Insert 两条事件。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#含有单条-update-变更的事务拆分)
- TiCDC 在处理 Update 事件时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 Delete 和 Insert 两条事件。更多信息,请参考[用户文档](/ticdc/ticdc-split-update-behavior.md#含有单条-update-变更的事务拆分)

## 改进提升

Expand Down
2 changes: 1 addition & 1 deletion releases/release-6.5.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ TiDB 版本:6.5.4

### 行为变更

- 对于包含多条变更的事务,如果 Update 事件的主键或者非空唯一索引的列值发生改变,TiCDC 会将该其拆分为 Delete 和 Insert 两条事件,并确保将所有事件有序,以保证 Delete 事件在 Insert 事件之前。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#含有多条-update-变更的事务拆分)
- 对于包含多条变更的事务,如果 Update 事件的主键或者非空唯一索引的列值发生改变,TiCDC 会将该其拆分为 Delete 和 Insert 两条事件,并确保将所有事件有序,以保证 Delete 事件在 Insert 事件之前。更多信息,请参考[用户文档](/ticdc/ticdc-split-update-behavior.md#含有多条-update-变更的事务拆分)

## 改进提升

Expand Down
2 changes: 1 addition & 1 deletion releases/release-7.1.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ TiDB 版本:7.1.1

### 行为变更

- TiCDC 在处理 Update 事件时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 Delete 和 Insert 两条事件。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#含有单条-update-变更的事务拆分)
- TiCDC 在处理 Update 事件时,如果事件的主键或者非空唯一索引的列值发生改变,则会将该条事件拆分为 Delete 和 Insert 两条事件。更多信息,请参考[用户文档](/ticdc/ticdc-split-update-behavior.md#含有单条-update-变更的事务拆分)

## 改进提升

Expand Down
2 changes: 1 addition & 1 deletion releases/release-7.1.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ TiDB 版本:7.1.2

### 行为变更

- 对于包含多条变更的事务,如果 Update 事件的主键或者非空唯一索引的列值发生改变,TiCDC 会将该其拆分为 Delete 和 Insert 两条事件,并确保将所有事件有序,以保证 Delete 事件在 Insert 事件之前。更多信息,请参考[用户文档](/ticdc/ticdc-behavior-change.md#含有多条-update-变更的事务拆分)
- 对于包含多条变更的事务,如果 Update 事件的主键或者非空唯一索引的列值发生改变,TiCDC 会将该其拆分为 Delete 和 Insert 两条事件,并确保将所有事件有序,以保证 Delete 事件在 Insert 事件之前。更多信息,请参考[用户文档](/ticdc/ticdc-split-update-behavior.md#含有多条-update-变更的事务拆分)

## 改进提升

Expand Down
54 changes: 0 additions & 54 deletions ticdc/ticdc-behavior-change.md

This file was deleted.

5 changes: 5 additions & 0 deletions ticdc/ticdc-changefeed-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ sasl-oauth-grant-type = "client_credentials"
# Kafka SASL OAUTHBEARER 认证机制中的 audience。默认值为空。在使用该认证机制时,该参数可选填。
sasl-oauth-audience = "kafka"
# 控制是否输出原始的数据变更事件,默认值为 false,表示当使用非 MySQL Sink 且 `UPDATE` 事件的主键或者非空唯一索引的列值发生改变时,TiCDC 会将该其拆分为 `DELETE` 和 `INSERT` 两条事件,并确保所有事件按照 `DELETE` 事件在 `INSERT` 事件之前的顺序进行排序。设置为 true 时,表示不拆分事件,直接输出原始事件。
# output-raw-change-event = false
[sink.cloud-storage-config]
# 向下游存储服务保存数据变更记录的并发度,默认值为 16。
worker-count = 16
Expand All @@ -236,4 +239,6 @@ file-expiration-days = 0
file-cleanup-cron-spec = "0 0 2 * * *"
# 上传单个文件的并发数,默认值为 1,表示禁用并发。
flush-concurrency = 1
# 控制是否输出原始的数据变更事件,默认值为 false,表示当使用非 MySQL Sink 且 `UPDATE` 事件的主键或者非空唯一索引的列值发生改变时,TiCDC 会将该其拆分为 `DELETE` 和 `INSERT` 两条事件,并确保所有事件按照 `DELETE` 事件在 `INSERT` 事件之前的顺序进行排序。设置为 true 时,表示不拆分事件,直接输出原始事件。
output-raw-change-event = false
```
1 change: 1 addition & 0 deletions ticdc/ticdc-open-api-v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ curl -X GET http://127.0.0.1:8300/api/v2/health
| `file_expiration_days` | `INT` 类型,文件保留的时长。|
| `file_cleanup_cron_spec` | `STRING` 类型,定时清理任务的运行周期,与 crontab 配置兼容,格式为 `<Second> <Minute> <Hour> <Day of the month> <Month> <Day of the week (Optional)>`|
| `flush_concurrency` | `INT` 类型,上传单个文件的并发数。|
| `output_raw_change_event` | `BOOLEAN` 类型,控制使用非 MySQL Sink 时是否输出原始的数据变更事件。|

### 使用样例

Expand Down
2 changes: 1 addition & 1 deletion ticdc/ticdc-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ MySQL binlog 直接记录了上游执行的所有 DML 操作的 SQL 语句。与

TiCDC 会根据收到的这些数据变更信息,适配各个类型的下游来生成合适格式的数据传输给下游。例如,生成 Canal-JSON、Avro 等格式的数据写入 Kafka 中,或者重新转换成 SQL 语句发送给下游的 MySQL 或者 TiDB。

目前 TiCDC 将数据变更信息适配对应的协议时,对于特定的 `UPDATE` 事件,可能会将其拆成一条 `DELETE` 事件和一条 `INSERT` 事件。详见[将 Update 事件拆分为 Delete 和 Insert 事件](/ticdc/ticdc-behavior-change.md#将-update-事件拆分为-delete-和-insert-事件)
目前 TiCDC 将数据变更信息适配对应的协议时,对于特定的 `UPDATE` 事件,可能会将其拆成一条 `DELETE` 事件和一条 `INSERT` 事件。详见 [MySQL Sink 拆分 `UPDATE` 事件行为说明](/ticdc/ticdc-split-update-behavior.md#mysql-sink-拆分-update-事件行为说明)[非 MySQL Sink 拆分主键或唯一键 `UPDATE` 事件](/ticdc/ticdc-split-update-behavior.md#非-mysql-sink-拆分主键或唯一键-update-事件)

当下游是 MySQL 或者 TiDB 时,因为 TiCDC 并非直接获取原生上游执行的 DML 语句,而是重新根据数据变更信息来生成 SQL 语句,因此不能保证写入下游的 SQL 语句和上游执行的 SQL 语句完全相同,但会保证最终结果的一致性。

Expand Down
Loading

0 comments on commit 937628f

Please sign in to comment.