From 08904c6c47b6e60a71956ac8b3dd9fc6529ed5c1 Mon Sep 17 00:00:00 2001 From: nhsmw Date: Wed, 22 Jan 2025 14:11:17 +0800 Subject: [PATCH 1/5] This is an automated cherry-pick of #19636 Signed-off-by: ti-chi-bot --- ticdc/ticdc-avro-protocol.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index 4a90f30756ef..2fb04ff3a3dc 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -89,7 +89,42 @@ Key 中的 `fields` 只包含主键或唯一索引列。 } ``` +<<<<<<< HEAD Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列,而不仅仅是主键列。 +======= +Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列。 + +> **注意:** +> +> Avro 协议在编码 DML 事件时,操作方式如下: +> +> - 对于 Delete 事件,只编码 Key 部分,Value 部分为空。 +> - 对于 Insert 事件,编码所有列数据到 Value 部分。 +> - 对于 Update 事件,只编码更新后的所有列数据到 Value 部分。 +> +> Avro 协议不会对 Update 和 Delete 事件的旧值进行编码。此外,为了与大多数依赖 `null` 记录来识别删除 (`delete.on.null`) 的 Confluent sink 连接器兼容,即使开启 `enable-tidb-extension` 选项,Delete 事件也不包含 TiDB 扩展字段信息,如 `_tidb_commit_ts`。如果你需要这些功能,请考虑使用其他协议,例如 Canal-JSON 或 Debezium。 + +## TiDB 扩展字段 + +默认情况下,Avro 只编码在 DML 事件中发生数据变更的行的所有列数据信息,不收集数据变更的类型和 TiDB 专有的 CommitTS 事务唯一标识信息。为了解决这个问题,TiCDC 在 Avro 协议格式中附加了 TiDB 扩展字段。当 `sink-uri` 中设置 `enable-tidb-extension` 为 `true` (默认为 `false`)后,TiCDC 生成 Avro 消息时,会在 Value 部分新增三个字段: + +- `_tidb_op`:DML 的类型,"c" 表示插入,"u" 表示更新。 +- `_tidb_commit_ts`:事务唯一标识信息。 +- `_tidb_commit_physical_time`:事务标识信息中现实时间的时间戳。 + +配置样例如下所示: + +```shell +cdc cli changefeed create --server=http://127.0.0.1:8300 --changefeed-id="kafka-avro-enable-extension" --sink-uri="kafka://127.0.0.1:9092/topic-name?protocol=avro&enable-tidb-extension=true" --schema-registry=http://127.0.0.1:8081 --config changefeed_config.toml +``` + + ```shell + [sink] + dispatchers = [ + {matcher = ['*.*'], topic = "tidb_{schema}_{table}"}, + ] + ``` +>>>>>>> 523ebe23a0 (ticdc: add note to the Avro protocol (#19636)) 如果开启了 [TiDB 扩展字段](#tidb-扩展字段),那么 Value 数据格式将会变成: From 601ed43c237f419aefc7501774269ec029098acd Mon Sep 17 00:00:00 2001 From: nhsmw Date: Wed, 22 Jan 2025 14:50:37 +0800 Subject: [PATCH 2/5] Update ticdc-avro-protocol.md --- ticdc/ticdc-avro-protocol.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index 2fb04ff3a3dc..b9c7d2d7a0e2 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -89,9 +89,6 @@ Key 中的 `fields` 只包含主键或唯一索引列。 } ``` -<<<<<<< HEAD -Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列,而不仅仅是主键列。 -======= Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列。 > **注意:** @@ -124,7 +121,6 @@ cdc cli changefeed create --server=http://127.0.0.1:8300 --changefeed-id="kafka- {matcher = ['*.*'], topic = "tidb_{schema}_{table}"}, ] ``` ->>>>>>> 523ebe23a0 (ticdc: add note to the Avro protocol (#19636)) 如果开启了 [TiDB 扩展字段](#tidb-扩展字段),那么 Value 数据格式将会变成: From d40c3140665abbfbbba4e84a2506414d0d8c6e72 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 22 Jan 2025 15:00:34 +0800 Subject: [PATCH 3/5] removed the duplicated section --- ticdc/ticdc-avro-protocol.md | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index b9c7d2d7a0e2..337c2eaa36d2 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -101,26 +101,6 @@ Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` > > Avro 协议不会对 Update 和 Delete 事件的旧值进行编码。此外,为了与大多数依赖 `null` 记录来识别删除 (`delete.on.null`) 的 Confluent sink 连接器兼容,即使开启 `enable-tidb-extension` 选项,Delete 事件也不包含 TiDB 扩展字段信息,如 `_tidb_commit_ts`。如果你需要这些功能,请考虑使用其他协议,例如 Canal-JSON 或 Debezium。 -## TiDB 扩展字段 - -默认情况下,Avro 只编码在 DML 事件中发生数据变更的行的所有列数据信息,不收集数据变更的类型和 TiDB 专有的 CommitTS 事务唯一标识信息。为了解决这个问题,TiCDC 在 Avro 协议格式中附加了 TiDB 扩展字段。当 `sink-uri` 中设置 `enable-tidb-extension` 为 `true` (默认为 `false`)后,TiCDC 生成 Avro 消息时,会在 Value 部分新增三个字段: - -- `_tidb_op`:DML 的类型,"c" 表示插入,"u" 表示更新。 -- `_tidb_commit_ts`:事务唯一标识信息。 -- `_tidb_commit_physical_time`:事务标识信息中现实时间的时间戳。 - -配置样例如下所示: - -```shell -cdc cli changefeed create --server=http://127.0.0.1:8300 --changefeed-id="kafka-avro-enable-extension" --sink-uri="kafka://127.0.0.1:9092/topic-name?protocol=avro&enable-tidb-extension=true" --schema-registry=http://127.0.0.1:8081 --config changefeed_config.toml -``` - - ```shell - [sink] - dispatchers = [ - {matcher = ['*.*'], topic = "tidb_{schema}_{table}"}, - ] - ``` 如果开启了 [TiDB 扩展字段](#tidb-扩展字段),那么 Value 数据格式将会变成: From ac8b8c879ff7bf892d49c97bb3b3192bfb7cae56 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 22 Jan 2025 15:18:17 +0800 Subject: [PATCH 4/5] remove an empty line --- ticdc/ticdc-avro-protocol.md | 1 - 1 file changed, 1 deletion(-) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index 337c2eaa36d2..050929b94558 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -101,7 +101,6 @@ Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` > > Avro 协议不会对 Update 和 Delete 事件的旧值进行编码。此外,为了与大多数依赖 `null` 记录来识别删除 (`delete.on.null`) 的 Confluent sink 连接器兼容,即使开启 `enable-tidb-extension` 选项,Delete 事件也不包含 TiDB 扩展字段信息,如 `_tidb_commit_ts`。如果你需要这些功能,请考虑使用其他协议,例如 Canal-JSON 或 Debezium。 - 如果开启了 [TiDB 扩展字段](#tidb-扩展字段),那么 Value 数据格式将会变成: ```shell From 6ed0b05fd9993ea03e8294c6b4c39af75fdab8cb Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 22 Jan 2025 15:19:19 +0800 Subject: [PATCH 5/5] Update ticdc/ticdc-avro-protocol.md --- ticdc/ticdc-avro-protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-avro-protocol.md b/ticdc/ticdc-avro-protocol.md index 050929b94558..0bd7a4eac1bc 100644 --- a/ticdc/ticdc-avro-protocol.md +++ b/ticdc/ticdc-avro-protocol.md @@ -89,7 +89,7 @@ Key 中的 `fields` 只包含主键或唯一索引列。 } ``` -Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列。 +Value 数据格式默认与 Key 数据格式相同,但是 Value 的 `fields` 中包含了所有的列,而不仅仅是主键列。 > **注意:** >