Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
3 changes: 2 additions & 1 deletion ticdc/ticdc-changefeed-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-repl
#### `enable-table-across-nodes`

- 将表以 Region 为单位分配给多个 TiCDC 节点进行同步。
- 该功能只在 Kafka changefeed 上生效,暂不支持 MySQL changefeed。
- 该功能在老架构上只在 Kafka changefeed 上生效,暂不支持 MySQL changefeed。
- 该功能在新架构上支持 MySQL changefeed,Kafka changefeed 以及 storage changefeed。
- `enable-table-across-nodes` 开启后,有两种分配模式:

1. 按 Region 的数量分配,即每个 TiCDC 节点处理 Region 的个数基本相等。当某个表 Region 个数大于 `region-threshold` 值时,会将表分配到多个节点处理。`region-threshold` 默认值为 `100000`。
Expand Down
4 changes: 4 additions & 0 deletions ticdc/ticdc-sink-to-cloud-storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,10 @@ CDC000005.csv

上述内容表明该目录下 `CDC000001.csv` 到 `CDC000004.csv` 文件已被占用,当 TiCDC 集群中发生表调度或者节点重启时,新的节点会读取 Index 文件,并判断 `CDC000005.csv` 是否被占用。如果未被占用,则新节点会从 `CDC000005.csv` 开始写文件。如果已被占用,则从 `CDC000006.csv` 开始写文件,这样可防止覆盖其他节点写入的数据。

> **注意:**
>
> 新架构支持将表以 Region 为单位分配给多个 TiCDC 节点进行同步,设置为了保证多个节点的写入不会错误覆盖已写入的数据,文件名会变为 CDC_{uuid}_{num}.{extension} 的形式,Index 文件名会变为 CDC_{uuid}.index 的形式。

### 元数据

元数据信息将会存储到以下路径:
Expand Down
10 changes: 10 additions & 0 deletions ticdc/ticdc-storage-consumer-dev-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,13 @@ func (tc *TableVersionConsumer) ExecuteDML() {}
在处理完 DDL 事件后,可以在 `{schema}/{table}/{table-version-separator}/` 目录下,根据具体的文件格式(CSV 或 Canal-JSON)并按照文件序号依次处理 DML 事件。

因为 TiCDC 提供 At Least Once 语义,可能出现重复发送数据的情况,所以需要在消费程序中比较数据事件的 commit ts 和 consumer checkpoint,并在 commit ts 小于 consumer checkpoint 的情况下进行去重处理。

在处理文件时,可能会遇到某个文件还没有写入完成就进行读取的情况,这会导致部分数据没有成功读取。我们需要先读取 Index 文件来获取可以进行处理的文件来避免这种情况发生。消费逻辑为:
- 读取目录下的 meta/CDC.index 文件,获取当前已经完成写入的文件名。
- 依次处理文件序号小于等于该文件名的 DML 事件。
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在新架构上为小于等于,在老架构上应该为小于


> **注意:**
>
> 在新架构下开启 enable-table-across-nodes 后,文件名变为 CDC\_{uuid}\_000001.json 的形式。此时,该目录下会存在 uuid 不同,序号相同的文件。消费时,读取对应的 Index 文件来获取已经完成写入的文件名,依次处理文件序号小于等于对应文件名的 DML 事件,对这些文件按 DML 事件的 commit-ts 进行排序后统一进行处理。