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: add more docs about unified sorter #6258

Merged
merged 5 commits into from
May 28, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 3 additions & 0 deletions ticdc/deploy-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_2.log --addr=0.0.0.0:830
cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_3.log --addr=0.0.0.0:8303 --advertise-addr=127.0.0.1:8303
```

## TiCDC `cdc server` 命令行参数说明

对于 `cdc server` 命令中可用选项解释如下:

- `gc-ttl`:TiCDC 在 PD 设置的服务级别 GC safepoint 的 TTL (Time To Live) 时长,单位为秒,默认值为 `86400`,即 24 小时。
Expand All @@ -59,3 +61,4 @@ cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_3.log --addr=0.0.0.0:830
- `cert`:TiCDC 使用的证书文件路径,PEM 格式,可选。
- `key`:TiCDC 使用的证书密钥文件路径,PEM 格式,可选。
- `config`:可选项,表示 TiCDC 使用的配置文件地址。TiCDC 从 v5.0.0 开始支持该选项,TiUP 从 v1.4.0 开始支持在部署 TiCDC 时使用该配置。
- `sort-dir`:指定排序引擎使用的临时文件目录。该配置项的默认值为 `/tmp/cdc_sort`。在开启 Unified Sorter 的情况下,如果服务器的该目录不可写或可用空间不足,请手动指定 `sort-dir`。需确保 TiCDC 在该 `sort-dir` 路径下可读写数据。
29 changes: 21 additions & 8 deletions ticdc/manage-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,13 @@ tiup cluster upgrade <cluster-name> v4.0.6
{{< copyable "shell-regular" >}}

```shell
cdc cli changefeed create --pd=http://10.0.10.25:2379 --sink-uri="mysql://root:[email protected]:3306/" --changefeed-id="simple-replication-task"
cdc cli changefeed create --pd=http://10.0.10.25:2379 --sink-uri="mysql://root:[email protected]:3306/" --changefeed-id="simple-replication-task" --sort-engine="unified"
```

```shell
Create changefeed successfully!
ID: simple-replication-task
Info: {"sink-uri":"mysql://root:[email protected]:3306/","opts":{},"create-time":"2020-03-12T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"memory","sort-dir":".","config":{"case-sensitive":true,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null,"protocol":"default"},"cyclic-replication":{"enable":false,"replica-id":0,"filter-replica-ids":null,"id-buckets":0,"sync-ddl":false},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null}
Info: {"sink-uri":"mysql://root:[email protected]:3306/","opts":{},"create-time":"2020-03-12T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"sort-engine":"unified","sort-dir":".","config":{"case-sensitive":true,"filter":{"rules":["*.*"],"ignore-txn-start-ts":null,"ddl-allow-list":null},"mounter":{"worker-num":16},"sink":{"dispatchers":null,"protocol":"default"},"cyclic-replication":{"enable":false,"replica-id":0,"filter-replica-ids":null,"id-buckets":0,"sync-ddl":false},"scheduler":{"type":"table-number","polling-time":-1}},"state":"normal","history":null,"error":null}
```

- `--changefeed-id`:同步任务的 ID,格式需要符合正则表达式 `^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$`。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID。
Expand All @@ -98,13 +98,13 @@ Info: {"sink-uri":"mysql://root:[email protected]:3306/","opts":{},"create-time":

- `--start-ts`:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。
- `--target-ts`:指定 changefeed 的目标 TSO。TiCDC 集群拉取数据直到这个 TSO 停止。默认为空,即 TiCDC 不会自动停止。
- `--sort-engine`:指定 changefeed 使用的排序引擎。因 TiDB 和 TiKV 使用分布式架构,TiCDC 需要对数据变更记录进行排序后才能输出。该项支持 `memory`/`unified`/`file`(默认为 `unified`)
- `--sort-engine`:指定 changefeed 使用的排序引擎。因 TiDB 和 TiKV 使用分布式架构,TiCDC 需要对数据变更记录进行排序后才能输出。该项支持 `unified`(默认)/`memory`/`file`:

- `memory`:在内存中进行排序。
- `unified`:优先使用内存排序,内存不足时则自动使用硬盘暂存数据。该选项默认开启。
- `memory`:在内存中进行排序。 **不建议使用,同步大量数据时易引发 OOM。**
- `file`:完全使用磁盘暂存数据。**已经弃用,不建议在任何情况使用。**

- `--sort-dir`: 指定排序引擎使用的临时文件目录。**不建议在 `cdc cli changefeed create` 中使用该选项**,建议在 `cdc server` 命令中使用该选项来设置临时文件目录。该配置项的默认值为 `/tmp/cdc_sort`。在开启 Unified Sorter 的情况下,如果服务器的该目录不可写或可用空间不足,请手动指定 `sort-dir`。如果 `sort-dir` 对应的目录不可写入,changefeed 将会自动停止。
- `--sort-dir`: 指定排序引擎使用的临时文件目录。**不建议在 `cdc cli changefeed create` 中使用该选项**,建议在 [`cdc server` 命令中使用该选项来设置临时文件目录](/ticdc/deploy-ticdc.md#ticdc-cdc-server-命令行参数说明)。该配置项的默认值为 `/tmp/cdc_sort`。在开启 Unified Sorter 的情况下,如果服务器的该目录不可写或可用空间不足,请手动指定 `sort-dir`。如果 `sort-dir` 对应的目录不可写入,changefeed 将会自动停止。
Copy link
Member Author

Choose a reason for hiding this comment

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

@IANTHEREAL 是否需要移除改行?

- `--config`:指定 changefeed 配置文件。

#### Sink URI 配置 `mysql`/`tidb`
Expand Down Expand Up @@ -299,7 +299,7 @@ cdc cli changefeed query --pd=http://10.0.10.25:2379 --changefeed-id=simple-repl
"start-ts": 419036036249681921,
"target-ts": 0,
"admin-job-type": 0,
"sort-engine": "memory",
"sort-engine": "unified",
"sort-dir": ".",
"config": {
"case-sensitive": true,
Expand Down Expand Up @@ -742,7 +742,7 @@ sync-ddl = true
2. 开启环形同步的数据表名字需要符合正则表达式 `^[a-zA-Z0-9_]+$`。
3. 在创建环形同步任务前,开启环形复制的数据表必须已创建完毕。
4. 开启环形复制后,不能创建一个会被环形同步任务同步的表。
5. 在多集群同时写入时,为了避免业务出错,请避免执行 DDL 语句,比如 `ADD COLUMN`/`DROP COLUMN` 等。
5. 在多集群同时写入时,为了避免业务出错,请避免执行 DDL 语句,比如 `ADD COLUMN`/`DROP COLUMN` 等。
6. 如果想在线执行 DDL 语句,需要确保满足以下条件:
+ 业务兼容 DDL 语句执行前后的表结构。
+ 多个集群的 TiCDC 组件构成一个单向 DDL 同步链,不能成环。例如以上在 TiDB 集群 A,B 和 C 上创建环形同步任务的示例中,只有 C 集群的 TiCDC 组件关闭了 `sync-ddl`。
Expand Down Expand Up @@ -783,13 +783,26 @@ force-replicate = true

## Unified Sorter 功能

Unified Sorter 是 TiCDC 中的排序引擎功能,目前默认开启,用于缓解以下场景造成的内存溢出问题:
Unified Sorter 是 TiCDC 中的排序引擎功能,用于缓解以下场景造成的内存溢出问题:

+ 如果 TiCDC 数据订阅任务的暂停中断时间长,其间积累了大量的增量更新数据需要同步。
+ 从较早的时间点启动数据订阅任务,业务写入量大,积累了大量的更新数据需要同步。

对 v4.0.13 版本之后的 `cdc cli` 创建的 changefeed,默认开启 Unified Sorter。对 v4.0.13 版本前已经存在的 changefeed,则使用之前的配置。
TomShawn marked this conversation as resolved.
Show resolved Hide resolved

要确定一个 changefeed 上是否开启了 Unified Sorter 功能,可执行以下示例命令查看(假设 PD 实例的 IP 地址为 `http://10.0.10.25:2379`):

{{< copyable "shell-regular" >}}

```shell
cdc cli --pd="http://10.0.10.25:2379" changefeed query --changefeed-id=simple-replication-task | grep 'sort-engine'
```

以上命令的返回结果中,如果 `sort-engine` 的值为 "unified",则说明 Unified Sorter 已在该 changefeed 上开启。

> **注意:**
>
> + 如果服务器使用机械硬盘或其他有延迟或吞吐有瓶颈的存储设备,请谨慎开启 Unified Sorter。
> + 请保证硬盘的空闲容量大于等于 128G。如果需要同步大量历史数据,请确保每个节点的空闲容量大于等于要追赶的同步数据。
> + Unified Sorter 默认开启,如果您的服务器不符合以上条件,并希望关闭 Unified Sorter,请手动将 changefeed 的 `sort-engine` 设为 `memory`。
> + 如需在已有的 changefeed 上开启 Unified Sorter,参见[同步任务中断,尝试再次启动后 TiCDC 发生 OOM,如何处理](/ticdc/troubleshoot-ticdc.md#同步任务中断尝试再次启动后-ticdc-发生-oom如何处理)回答中提供的方法。