@clickzetta/cz-cli-darwin-x64 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cz-cli +0 -0
- package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +386 -0
- package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +548 -0
- package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +220 -0
- package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-dynamic-table/SKILL.md +112 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +257 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +124 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +96 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +109 -0
- package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +156 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +751 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +324 -0
- package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +537 -0
- package/bin/skills/clickzetta-query-optimizer/SKILL.md +156 -0
- package/bin/skills/clickzetta-query-optimizer/references/explain.md +56 -0
- package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +78 -0
- package/bin/skills/clickzetta-query-optimizer/references/optimize.md +65 -0
- package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +49 -0
- package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +42 -0
- package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +276 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +379 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +166 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +185 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +129 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +222 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +125 -0
- package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +206 -0
- package/bin/skills/clickzetta-vcluster-manager/SKILL.md +212 -0
- package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +54 -0
- package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +150 -0
- package/bin/skills/clickzetta-volume-manager/SKILL.md +292 -0
- package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +199 -0
- package/package.json +1 -1
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/SKILL.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/dt-declaration-strategy.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/incremental-config-reference.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/refresh-history-guide.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/sql-limitations.md +0 -0
- /package/bin/skills/{dynamic-table-alter → clickzetta-dynamic-table/dynamic-table-alter}/SKILL.md +0 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clickzetta-cdc-sync-pipeline
|
|
3
|
+
description: |
|
|
4
|
+
创建和管理 ClickZetta Lakehouse 多表实时同步任务(CDC),将 MySQL / PostgreSQL 数据库整库或多表实时同步到 Lakehouse。
|
|
5
|
+
支持三种同步模式:整库镜像、多表镜像、多表合并(分库分表合并)。
|
|
6
|
+
基于 Binlog(MySQL)或 WALs(PostgreSQL)实现秒级端到端时效性,包含全量 + 增量两阶段同步。
|
|
7
|
+
当用户说"多表实时同步"、"整库同步"、"整库镜像"、"CDC 整库"、"多表 CDC"、"分库分表合并"、
|
|
8
|
+
"多表合并同步"、"MySQL 整库同步到 Lakehouse"、"PostgreSQL 整库同步"、"multi-table realtime sync"、
|
|
9
|
+
"database migration"、"全量+增量同步"、"同步运维"、"同步 SOP"、"同步告警配置"、
|
|
10
|
+
"Binlog 位点过期"、"server-id 冲突"、"补充全量同步"、"新增同步表"时触发。
|
|
11
|
+
包含源端数据库准备(参数配置+权限)、三种同步模式选择、任务创建部署、运维 SOP(补全量/加表/数据修复)、
|
|
12
|
+
监控告警配置(5 种告警规则+IM webhook)、详细故障排除等 ClickZetta Studio 特有逻辑。
|
|
13
|
+
Keywords: CDC, real-time sync, MySQL, PostgreSQL, change data capture, mirror, merge
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# 多表实时同步 Pipeline 工作流
|
|
17
|
+
|
|
18
|
+
## 适用场景
|
|
19
|
+
|
|
20
|
+
- 将 MySQL / PostgreSQL 数据库整库或多表实时同步到 Lakehouse(CDC 变更捕获)
|
|
21
|
+
- 整库镜像:以数据库为粒度,自动适配新增表
|
|
22
|
+
- 多表镜像:以表粒度选择,支持自动感知字段变更
|
|
23
|
+
- 多表合并:将分库分表数据合并写入同一张目标表
|
|
24
|
+
- 全量 + 增量两阶段同步,秒级端到端时效性
|
|
25
|
+
- 关键词:多表实时同步、整库同步、CDC、分库分表合并、database migration
|
|
26
|
+
|
|
27
|
+
## 与其他同步方式的区别
|
|
28
|
+
|
|
29
|
+
| 维度 | 多表实时同步(本 Skill) | 单表实时同步 | 离线同步 |
|
|
30
|
+
|------|------------------------|------------|---------|
|
|
31
|
+
| 任务类型 ID | `281`(多表实时同步) | `28` | `10` / `291` |
|
|
32
|
+
| 同步粒度 | 整库/多表/分库分表合并 | 单表/单 Topic | 单表/多表 |
|
|
33
|
+
| 运行模式 | 持续运行(流式 CDC) | 持续运行(流式) | 周期调度(批量) |
|
|
34
|
+
| 数据源 | MySQL / PostgreSQL | Kafka/MySQL/PG/SQLServer | 多种 |
|
|
35
|
+
| 调度策略 | 无需配置,提交即运行 | 无需配置 | 需配置 Cron |
|
|
36
|
+
| 适用 Skill | `clickzetta-cdc-sync-pipeline` | `clickzetta-realtime-sync-pipeline` | `clickzetta-batch-sync-pipeline` |
|
|
37
|
+
|
|
38
|
+
## 支持的数据源
|
|
39
|
+
|
|
40
|
+
### 来源端
|
|
41
|
+
|
|
42
|
+
| 数据源类型 | 增量读取模式 | 数据库版本 | ds_type |
|
|
43
|
+
|-----------|------------|-----------|---------|
|
|
44
|
+
| MySQL 类(含 Aurora MySQL、PolarDB MySQL) | Binlog | 5.6+、8.x | 5, 39, 19 |
|
|
45
|
+
| PostgreSQL 类(含 Aurora PG、PolarDB PG) | WALs 日志 | 14+ | 7, 40, 48 |
|
|
46
|
+
| SQL Server | CDC | - | 8 |
|
|
47
|
+
| TiDB | - | - | 17 |
|
|
48
|
+
|
|
49
|
+
### 目标端
|
|
50
|
+
|
|
51
|
+
| 数据源 | ds_type |
|
|
52
|
+
|--------|---------|
|
|
53
|
+
| Lakehouse | 1 |
|
|
54
|
+
| Kafka | 2 |
|
|
55
|
+
|
|
56
|
+
## 前置依赖
|
|
57
|
+
|
|
58
|
+
- ClickZetta Lakehouse Studio 账户,具备创建同步任务权限
|
|
59
|
+
- 源端数据源已在 Studio 中配置(通过 Studio UI 添加数据源,不是 SQL Storage Connection),且账号具备 CDC 所需权限
|
|
60
|
+
- Sync VCluster 可用(多表实时同步任务 task_type=281 必须使用 Sync VCluster)
|
|
61
|
+
- **执行环境(满足其一即可,优先使用 cz-cli)**:
|
|
62
|
+
- **cz-cli 路径**:已安装 cz-cli(`pip install cz-cli`),并完成 `cz-cli configure` 配置
|
|
63
|
+
- **MCP 路径**:clickzetta-studio-mcp 工具可用(`create_task`、`save_cdc_realtime_task`、`publish_task`、`list_data_sources`、`LH_show_object_list` 等)
|
|
64
|
+
|
|
65
|
+
## 环境探测(执行前必读)
|
|
66
|
+
|
|
67
|
+
在开始任何操作前,先判断当前执行环境:
|
|
68
|
+
|
|
69
|
+
**第一步:检测 cz-cli 是否可用**
|
|
70
|
+
```bash
|
|
71
|
+
cz-cli --version
|
|
72
|
+
```
|
|
73
|
+
- 若命令存在 → **走 cz-cli 路径**(见本文档末尾"cz-cli 替代路径"章节)
|
|
74
|
+
- 若命令不存在 → 继续检测 MCP
|
|
75
|
+
|
|
76
|
+
**第二步:检测 MCP 是否可用(仅在 cz-cli 不可用时)**
|
|
77
|
+
|
|
78
|
+
尝试调用 `list_data_sources` 工具查询数据源列表。
|
|
79
|
+
- 若工具存在于 tool list → **走 MCP 路径**(本文档默认路径)
|
|
80
|
+
- 若工具不存在 → 停止执行,提示用户:
|
|
81
|
+
> "当前环境既无 cz-cli 也无 MCP 工具,请安装其中之一后重试。
|
|
82
|
+
> cz-cli 安装:`pip install cz-cli`,然后运行 `cz-cli configure`
|
|
83
|
+
> MCP 安装:参考 clickzetta-studio-mcp 配置文档"
|
|
84
|
+
|
|
85
|
+
> ⚠️ **重要区分**:CDC 多表同步使用 **Studio 数据源**(通过 Studio UI 或 API 配置),不是 SQL 的 `CREATE STORAGE CONNECTION`。
|
|
86
|
+
> - `CREATE STORAGE CONNECTION` 仅支持对象存储类型(OSS/COS/S3)和 Kafka
|
|
87
|
+
> - MySQL / PostgreSQL 等关系数据库的连接通过 **Studio 数据源管理** 配置
|
|
88
|
+
> - 使用 `list_data_sources` API 查看已配置的数据源
|
|
89
|
+
|
|
90
|
+
## 源端数据库准备
|
|
91
|
+
|
|
92
|
+
### MySQL 参数要求
|
|
93
|
+
|
|
94
|
+
在源端 MySQL 数据库上确认以下参数:
|
|
95
|
+
|
|
96
|
+
| 参数 | 要求值 | 查询方法 |
|
|
97
|
+
|------|--------|---------|
|
|
98
|
+
| `log_bin` | ON | `SHOW GLOBAL VARIABLES LIKE 'log_bin'` |
|
|
99
|
+
| `binlog_format` | ROW | `SHOW GLOBAL VARIABLES LIKE 'binlog_format'` |
|
|
100
|
+
| `binlog_row_image` | FULL | `SHOW GLOBAL VARIABLES LIKE 'binlog_row_image'` |
|
|
101
|
+
| `binlog_expire_logs_seconds` | ≥86400(建议) | - |
|
|
102
|
+
|
|
103
|
+
MySQL 权限要求(建议用 root 执行):
|
|
104
|
+
- 元数据读取:`SELECT` on information_schema + 目标库表
|
|
105
|
+
- Binlog 同步:`REPLICATION SLAVE`, `REPLICATION CLIENT`
|
|
106
|
+
- 全量同步:`SELECT` on 目标表
|
|
107
|
+
|
|
108
|
+
### PostgreSQL 参数要求
|
|
109
|
+
|
|
110
|
+
以下参数修改后需重启 PostgreSQL Server:
|
|
111
|
+
|
|
112
|
+
| 参数 | 要求值 | 说明 |
|
|
113
|
+
|------|--------|------|
|
|
114
|
+
| `wal_level` | logical | 支持逻辑解码 |
|
|
115
|
+
| `max_replication_slots` | ≥10 | 允许创建的 slot 数量 |
|
|
116
|
+
| `max_wal_senders` | ≥10 | 最多同时运行的 WAL sender 进程数 |
|
|
117
|
+
|
|
118
|
+
PostgreSQL 权限要求(建议用管理员账号执行):
|
|
119
|
+
- 元数据读取:`SELECT` on information_schema
|
|
120
|
+
- WAL 日志同步:`REPLICATION` 权限
|
|
121
|
+
- 全量同步:`SELECT` on 目标表
|
|
122
|
+
- 创建 publication:`CREATE` 权限
|
|
123
|
+
|
|
124
|
+
> **PostgreSQL 特别注意**:需要配置 replication slot,不同任务不要复用同一个 slot。任务启动时如 slot 被占用会启动失败。
|
|
125
|
+
|
|
126
|
+
## 工作流
|
|
127
|
+
|
|
128
|
+
### 步骤 1:确认 Sync VCluster 可用
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
使用 LH_show_object_list(object_type='VCLUSTERS')查看可用虚拟集群。
|
|
132
|
+
筛选 vcluster_type 包含 SYNC 的集群。
|
|
133
|
+
如无可用 Sync VCluster,提示用户先创建后再继续。
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 步骤 2:查找源端数据源
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
使用 list_data_sources 查看已配置的数据源。
|
|
140
|
+
按类型过滤:
|
|
141
|
+
- MySQL: ds_type=5
|
|
142
|
+
- PostgreSQL: ds_type=7
|
|
143
|
+
记录源端 datasource_id 和 datasource_type。
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 步骤 3:探查源端数据结构
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
使用 list_namespaces 查看源端数据库列表。
|
|
150
|
+
使用 list_metadata_objects 查看库下的表列表。
|
|
151
|
+
确认需要同步的范围(整库 / 指定表 / 分库分表)。
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 步骤 4:选择同步模式
|
|
155
|
+
|
|
156
|
+
根据用户需求选择三种模式之一:
|
|
157
|
+
|
|
158
|
+
| 模式 | pipeline_type | 适用场景 |
|
|
159
|
+
|------|--------------|---------|
|
|
160
|
+
| 整库镜像 | 3 | 同步整个数据库所有表,自动适配新增表 |
|
|
161
|
+
| 多表镜像 | 1 | 选定指定表同步,支持自动感知字段变更 |
|
|
162
|
+
| 多表合并 | 2 | 分库分表数据合并写入同一张目标表 |
|
|
163
|
+
|
|
164
|
+
### 步骤 5:创建多表实时同步任务
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
使用 create_task 创建任务:
|
|
168
|
+
- task_type: 281(多表实时同步)
|
|
169
|
+
- task_name: 自定义名称(如 "cdc_sync_mysql_orders_db")
|
|
170
|
+
- data_folder_id: 目标文件夹 ID(通过 list_folders 获取)
|
|
171
|
+
|
|
172
|
+
记录返回的 task_id(即 data_file_id)。
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 步骤 6:配置同步内容
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
使用 save_cdc_realtime_task 配置同步:
|
|
179
|
+
- data_file_id: 步骤 5 返回的 task_id
|
|
180
|
+
- pipeline_type: 步骤 4 选择的模式(1=多表镜像, 2=多表合并, 3=整库镜像)
|
|
181
|
+
- source_datasource_list: [{"datasourceId": <id>, "datasourceType": <type>}]
|
|
182
|
+
- sync_object_list:
|
|
183
|
+
- 整库镜像:[{"schemaName": "<数据库名>"}](仅指定库名)
|
|
184
|
+
- 多表镜像:[{"schemaName": "<库名>", "tableName": "<表名>"}, ...]
|
|
185
|
+
- 多表合并:通过正则或文件批量配置
|
|
186
|
+
- target_datasource: {"datasourceId": <lakehouse_id>, "datasourceType": 1}
|
|
187
|
+
- sync_mode: 1(全量+增量,推荐)或 2(仅增量)
|
|
188
|
+
- save_mode: 2(追加,推荐新任务使用)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
> **sync_mode 说明**:
|
|
192
|
+
> - `1`(全量+增量):先全量同步历史数据,再启动增量 CDC,推荐首次使用
|
|
193
|
+
> - `2`(仅增量):仅从当前位点开始捕获变更,适合已有历史数据的场景
|
|
194
|
+
|
|
195
|
+
### 步骤 7:提交部署
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
使用 publish_task 提交任务:
|
|
199
|
+
- task_id: 任务 ID
|
|
200
|
+
- task_version: 当前版本号(通过 get_task_detail 获取)
|
|
201
|
+
|
|
202
|
+
提交后任务不会自动启动,需要手动启动。
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
> **重要**:多表实时同步任务是持续运行的流式任务,不需要配置调度策略(不要调用 save_task_configuration)。提交后在 Studio UI 中手动启动。
|
|
206
|
+
|
|
207
|
+
### 步骤 8:启动任务
|
|
208
|
+
|
|
209
|
+
在 Studio UI 中启动任务,选择启动方式:
|
|
210
|
+
|
|
211
|
+
| 启动方式 | 说明 | 适用场景 |
|
|
212
|
+
|---------|------|---------|
|
|
213
|
+
| 无状态启动 | 完整同步所有数据(全量→增量) | 首次启动 |
|
|
214
|
+
| 从上次保存状态恢复 | 从停止位点断点续传 | 停止后重启 |
|
|
215
|
+
| 自定义起始位置 | MySQL: 指定 binlog 文件/时间;PG: 指定 LSN | 数据回刷 |
|
|
216
|
+
|
|
217
|
+
全量同步阶段可配置最大并发数,控制对源端数据库的压力。
|
|
218
|
+
|
|
219
|
+
### 步骤 9:运维监控
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
任务启动后经历三个阶段:初始化 → 全量同步 → 增量同步。
|
|
223
|
+
|
|
224
|
+
监控指标:
|
|
225
|
+
- 读取数据 / 写入数据(记录数)
|
|
226
|
+
- 平均读取速率 / 平均写入速率
|
|
227
|
+
- Failover 次数
|
|
228
|
+
- 单表级别:最新读取位置、最新更新时间、数据延迟
|
|
229
|
+
|
|
230
|
+
单表运维操作:
|
|
231
|
+
- 优先执行:提高全量同步优先级
|
|
232
|
+
- 取消运行 / 强制停止:停止单表同步
|
|
233
|
+
- 重新同步:对该表重新全量+增量
|
|
234
|
+
- 补数同步:按条件过滤部分数据重新全量同步
|
|
235
|
+
- 查看异常:查看 Schema Evolution 异常等
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## 三种同步模式详解
|
|
239
|
+
|
|
240
|
+
### 整库镜像
|
|
241
|
+
|
|
242
|
+
- 以数据库为粒度配置,只选库不选表
|
|
243
|
+
- 自动适配库中新增表
|
|
244
|
+
- 适合需要完整镜像整个数据库的场景
|
|
245
|
+
|
|
246
|
+
### 多表镜像
|
|
247
|
+
|
|
248
|
+
- 以表粒度选择需要同步的表
|
|
249
|
+
- 支持自动感知字段个数的新增和删除
|
|
250
|
+
- 支持批量配置(上传配置文件)
|
|
251
|
+
- PostgreSQL 需要配置 replication slot(decoderbufs 或 pgoutput 插件)
|
|
252
|
+
|
|
253
|
+
### 多表合并
|
|
254
|
+
|
|
255
|
+
- 将分库分表数据合并写入同一张目标表
|
|
256
|
+
- 使用"虚拟表"作为中间承接:新建虚拟表时,基于数据源/Schema/Table 名称给定筛选条件,将匹配的源端表定义为写入同一张虚拟表
|
|
257
|
+
- 两种配置方式:
|
|
258
|
+
- 基于规则:正则匹配筛选表(如以 `abc` 开头的所有表)
|
|
259
|
+
- 基于文件:上传配置文件批量指定
|
|
260
|
+
- 扩展字段功能:可在目标表中额外新增字段记录来源信息(server/database/schema/table 名称)
|
|
261
|
+
- 分库分表主键冲突解决:开启扩展字段并将其设为联合主键,避免不同分库分表中主键相同记录的写入冲突
|
|
262
|
+
- 异构字段合并:当分库分表字段结构不完全一致时,系统自动校验并提示差异,可选择异构字段合并功能处理
|
|
263
|
+
|
|
264
|
+
## 高阶参数
|
|
265
|
+
|
|
266
|
+
在任务「参数」区域可设定以下高阶参数(默认不建议调整,调整前请联系技术支持):
|
|
267
|
+
|
|
268
|
+
| 参数 | 含义 | 默认值 | 调优建议 |
|
|
269
|
+
|------|------|--------|---------|
|
|
270
|
+
| `step1.taskmanager.memory.process.size` | 增量同步进程总内存 | 1600m | 全量数据特别大时可调至 4000m |
|
|
271
|
+
| `step2.taskmanager.memory.process.size` | 全量同步进程总内存 | 2000m | - |
|
|
272
|
+
| `step1.taskmanager.memory.task.off-heap.size` | 增量同步堆外内存 | 256m | 全量数据特别大时可调至 500M |
|
|
273
|
+
| `lh.table.cz.common.output.file.max.size` | 全量同步单文件切分大小 | 33554432 | - |
|
|
274
|
+
| `pod.limit.memory` | 提交客户端内存上限 | 1Gi | - |
|
|
275
|
+
|
|
276
|
+
## 停止与下线
|
|
277
|
+
|
|
278
|
+
### 停止任务
|
|
279
|
+
|
|
280
|
+
- 停止会自动保存增量同步位点
|
|
281
|
+
- 全量阶段停止:重启后未完成的表会重新全量同步
|
|
282
|
+
- 增量阶段停止:重启后从停止位点继续
|
|
283
|
+
- 恢复方式:点击"启动",选择"从上次保存状态恢复"即可断点续传
|
|
284
|
+
- 如需回溯数据:选择"自定义起始位置",指定 binlog 文件/位点(MySQL)或 LSN(PostgreSQL),确保指定位点未过期
|
|
285
|
+
|
|
286
|
+
### 下线任务(高危)
|
|
287
|
+
|
|
288
|
+
- 不保存同步位点,再次上线需重新同步
|
|
289
|
+
- 不清理已同步到目标端的数据,不删除目标表
|
|
290
|
+
- 重新同步不会重建表:全量覆盖写入(insert overwrite),增量 merge into 更新
|
|
291
|
+
- 仅在以下情况使用:任务确定不再需要、任务状态异常需修复
|
|
292
|
+
|
|
293
|
+
## 运维 SOP
|
|
294
|
+
|
|
295
|
+
### 后续补充全量同步
|
|
296
|
+
|
|
297
|
+
首次启动未选择全量同步,后续需要补充全量数据的 3 种方案:
|
|
298
|
+
|
|
299
|
+
| 方案 | 操作 | 影响 |
|
|
300
|
+
|------|------|------|
|
|
301
|
+
| 方案一:单表重新同步 | 对指定表执行"重新同步" | 源端数据同步到临时表,insert overwrite 写入目标表,不影响查询 |
|
|
302
|
+
| 方案二:单表补数同步 | 对指定表执行"补数同步",过滤条件设为 `where 1=1` | 按条件从源端拉取数据到临时表,delete + merge into 写入目标表 |
|
|
303
|
+
| 方案三:下线重上线 | 停止→下线→上线→启动(选择全量同步) | 清空位点信息,重新全量+增量同步,不删除目标表 |
|
|
304
|
+
|
|
305
|
+
### 新增同步表
|
|
306
|
+
|
|
307
|
+
1. 编辑任务,添加需要新增的表,保存
|
|
308
|
+
2. 提交任务发布
|
|
309
|
+
3. 在运维中心停止任务,再启动任务
|
|
310
|
+
4. 重启后自动同步新增表数据(如设定全量同步则执行全量,否则仅增量)
|
|
311
|
+
5. 不影响存量表的同步进度
|
|
312
|
+
|
|
313
|
+
### 分库分表加减数据源/Schema/Table
|
|
314
|
+
|
|
315
|
+
- 在任务开发界面直接编辑
|
|
316
|
+
- 保存→提交→重启任务后生效
|
|
317
|
+
- 新增对象如设定全量同步会自动执行全量
|
|
318
|
+
- 不影响存量表同步进度
|
|
319
|
+
|
|
320
|
+
### 优先同步重要表
|
|
321
|
+
|
|
322
|
+
- 全量同步阶段,对重要表使用"优先执行"操作
|
|
323
|
+
- 在资源队列中插队,优先处理该表的全量同步
|
|
324
|
+
|
|
325
|
+
### 暂停/恢复单表增量同步
|
|
326
|
+
|
|
327
|
+
- 暂停:对单表执行"停止增量同步",暂停该表变更消息消费
|
|
328
|
+
- 恢复:执行"恢复增量同步",为保证数据连续性会从源端重新拉取一次全量数据
|
|
329
|
+
- 适用场景:源端突发大流量时,暂停不重要表为重要表让出处理资源
|
|
330
|
+
|
|
331
|
+
### 单表数据修复
|
|
332
|
+
|
|
333
|
+
| 操作 | 说明 | 写入方式 |
|
|
334
|
+
|------|------|---------|
|
|
335
|
+
| 重新同步 | 重新同步源端表全量数据 | 同步到临时表 → insert overwrite 写入目标表 |
|
|
336
|
+
| 补数同步 | 按过滤条件从源端拉取部分/全部数据 | 同步到临时表 → delete 目标表相关数据 → merge into 写入 |
|
|
337
|
+
|
|
338
|
+
## 监控告警配置
|
|
339
|
+
|
|
340
|
+
### 推荐告警规则
|
|
341
|
+
|
|
342
|
+
建议配置以下 5 种告警规则,全方位监控任务健康度:
|
|
343
|
+
|
|
344
|
+
| 告警类型 | 监控事项 | 说明 |
|
|
345
|
+
|---------|---------|------|
|
|
346
|
+
| 任务 Failover | 多表实时同步作业 failover | 监控任务运行稳定性 |
|
|
347
|
+
| 任务停止 | 多表实时同步任务运行失败 | 任务异常停止告警 |
|
|
348
|
+
| 单表异常 | 多表实时同步任务目标表变更失败 | Schema Evolution 失败、单字段超 10M 限制等 |
|
|
349
|
+
| 端到端延迟 | 多表实时同步延迟 | 数据从源端到目标端的时间间隔 |
|
|
350
|
+
| 读取位点延迟 | 多表实时同步读取点位延迟 | 读取位点与源端最新位点的差距 |
|
|
351
|
+
|
|
352
|
+
每种告警可额外增加过滤属性(工作空间、任务名称等),不增加过滤则默认监控实例下所有多表实时任务。
|
|
353
|
+
|
|
354
|
+
### IM 告警机器人配置
|
|
355
|
+
|
|
356
|
+
1. 在飞书/企业微信中配置群机器人,获取 webhook 地址
|
|
357
|
+
2. 在产品中新增 webhook 配置,渠道选择飞书/企业微信,填写 webhook 地址
|
|
358
|
+
3. 在通知策略中启用 webhook
|
|
359
|
+
4. 在监控规则中选择启用了 webhook 的通知策略
|
|
360
|
+
|
|
361
|
+
## 示例
|
|
362
|
+
|
|
363
|
+
### 示例 1:MySQL 整库实时同步到 Lakehouse
|
|
364
|
+
|
|
365
|
+
用户说:"把 MySQL 的 ecommerce 数据库整库实时同步到 Lakehouse"
|
|
366
|
+
|
|
367
|
+
操作:
|
|
368
|
+
1. 源端准备:确认 MySQL 已开启 Binlog(`binlog_format=ROW`),创建同步账号并授权 REPLICATION SLAVE、SELECT
|
|
369
|
+
2. `list_data_sources` 找到 MySQL 数据源(ds_type=5)和 Lakehouse 数据源
|
|
370
|
+
3. `create_task(task_type=281, task_name="realtime_sync_ecommerce")` → 获取 studio_url
|
|
371
|
+
4. 在 Studio UI 中:选择整库镜像 → 选择 ecommerce 数据库 → 配置目标 workspace → sync_mode 选全量+增量
|
|
372
|
+
5. `publish_task(...)` 提交,任务立即开始全量初始化,完成后自动切换增量 CDC
|
|
373
|
+
|
|
374
|
+
### 示例 2:分库分表合并同步
|
|
375
|
+
|
|
376
|
+
用户说:"我有 order_0、order_1、order_2 三张分表,要合并同步到一张 orders 表"
|
|
377
|
+
|
|
378
|
+
操作:
|
|
379
|
+
1. `create_task(task_type=281, task_name="sync_sharding_orders")`
|
|
380
|
+
2. 在 Studio UI 中:选择多表合并 → 选择 order_0/order_1/order_2 → 目标表设为 orders → 配置扩展字段(如 `__source_table__`)区分来源
|
|
381
|
+
3. `publish_task(...)` 提交
|
|
382
|
+
|
|
383
|
+
## 故障排除
|
|
384
|
+
|
|
385
|
+
### 快速排查表
|
|
386
|
+
|
|
387
|
+
| 问题 | 排查方向 |
|
|
388
|
+
|------|---------|
|
|
389
|
+
| `CREATE STORAGE CONNECTION TYPE MYSQL` 报错 | ❌ ClickZetta 不支持 MySQL/PostgreSQL 类型的 Storage Connection。CDC 数据源通过 **Studio UI 数据源管理** 配置,不是 SQL 命令 |
|
|
390
|
+
| 任务创建失败 | 检查是否有可用 Sync VCluster |
|
|
391
|
+
| 源端连接失败 | 检查 Studio 中数据源配置、网络可达性、账号权限 |
|
|
392
|
+
| Binlog 读取失败 | 确认 MySQL `log_bin=ON`、`binlog_format=ROW`、`binlog_row_image=FULL` |
|
|
393
|
+
| WAL 读取失败 | 确认 PostgreSQL `wal_level=logical`,slot 未被其他任务占用 |
|
|
394
|
+
| Slot 启动冲突 | 不同任务不要复用同一个 slot,检查是否有其他运行中任务占用 |
|
|
395
|
+
| 全量同步慢 | 调整最大并发数,检查源端数据库负载,调大内存参数 |
|
|
396
|
+
| 增量延迟增大 | 检查 Sync VCluster 资源、源端数据量是否突增 |
|
|
397
|
+
| Schema Evolution 异常 | 通过"查看异常"操作查看详情,注意不支持变更字段类型 |
|
|
398
|
+
| 分库分表主键冲突 | 开启扩展字段并设为联合主键 |
|
|
399
|
+
|
|
400
|
+
### 增量同步失败
|
|
401
|
+
|
|
402
|
+
#### Binlog 位点过期
|
|
403
|
+
|
|
404
|
+
- 现象:报错 `The connector is trying to read binlog starting at ... but this is no longer available on the server`
|
|
405
|
+
- 原因:指定的 binlog 文件已被 MySQL 定期回收清理,或任务停止时间过长导致位点过期
|
|
406
|
+
- 解决:
|
|
407
|
+
1. 在源端执行 `SHOW MASTER STATUS` 查询当前最新 binlog 文件和位点
|
|
408
|
+
2. 使用最新的 file 和 position 重启同步任务(选择"自定义起始位置")
|
|
409
|
+
3. 如需补回丢失数据,对相应表执行"重新同步"
|
|
410
|
+
|
|
411
|
+
#### Server-id 冲突
|
|
412
|
+
|
|
413
|
+
- 现象:报错 `A slave with the same server_uuid/server_id as this slave has connected to the master`
|
|
414
|
+
- 原因:任务分配的 server-id(范围 5400-6400)与同一数据库上的其他同步工具/任务冲突
|
|
415
|
+
- 解决:检查同一数据库实例下是否有其他同步任务或工具正在同步 binlog,重启同步任务
|
|
416
|
+
|
|
417
|
+
#### 数据源时区配置错误
|
|
418
|
+
|
|
419
|
+
- 现象:报错 `The MySQL server has a timezone offset ... which does not match the configured timezone`
|
|
420
|
+
- 原因:数据源中配置的时区(默认 Asia/Shanghai)与数据库实际时区不一致
|
|
421
|
+
- 解决:确认数据库配置的时区,修改数据源中的时区配置
|
|
422
|
+
|
|
423
|
+
#### Binlog 事件 size 超限
|
|
424
|
+
|
|
425
|
+
- 现象:报错 `log event entry exceeded max_allowed_packet`
|
|
426
|
+
- 原因:数据库 `max_allowed_packet` 小于 Binlog 中某个事件的 size,或 binlog 文件损坏
|
|
427
|
+
- 解决:
|
|
428
|
+
1. 联系 DBA 调大 `max_allowed_packet`(上限 1G),生效后重新同步
|
|
429
|
+
2. 如调整后仍失败(binlog 可能损坏),重启任务选择更新的位点跳过问题位点
|
|
430
|
+
3. 对可能缺少数据的表执行"重新同步"补全
|
|
431
|
+
|
|
432
|
+
### 全量同步失败
|
|
433
|
+
|
|
434
|
+
#### PK 长度超限
|
|
435
|
+
|
|
436
|
+
- 现象:报错 `Encoded key size 191 exceeds max size 128`
|
|
437
|
+
- 原因:源表主键字段总长度超过 128 字节,或多表合并场景中扩展字段联合主键过长
|
|
438
|
+
- 解决:在同步任务配置中增加参数调大 PK 长度限制
|
|
439
|
+
|
|
440
|
+
### 同步任务 Failover
|
|
441
|
+
|
|
442
|
+
#### 与 Lakehouse Ingestion Service 断连
|
|
443
|
+
|
|
444
|
+
- 现象:Failover 详情中包含 `Async commit for instance ... failed. rpcProxy call hit final failed after max retry reached`
|
|
445
|
+
- 原因:通常发生在 Lakehouse 服务端升级期间,连接中断
|
|
446
|
+
- 解决:
|
|
447
|
+
1. 服务升级完成后任务通常自动恢复
|
|
448
|
+
2. 如持续 Failover,手动重启任务
|
|
449
|
+
3. 如仍无法恢复,检查 Lakehouse Ingestion Service 健康状态
|
|
450
|
+
|
|
451
|
+
#### Binlog 事件反序列化失败
|
|
452
|
+
|
|
453
|
+
- 现象:Failover 详情中包含 `Failed to deserialize data of EventHeaderV4`
|
|
454
|
+
- 原因:源端 binlog 突发大量事件(大量更新/批量删除),写入端反压导致读取端停止消费,binlog client 连接超时中断
|
|
455
|
+
- 解决:
|
|
456
|
+
1. 短时间流量增长:任务通常在有限 Failover 次数内自动恢复
|
|
457
|
+
2. 持续出现:调大 MySQL 参数 `slave_net_timeout` 和 `thread_pool_idle_timeout`
|
|
458
|
+
3. 临时调整(重启失效):`SET GLOBAL slave_net_timeout = 120; SET GLOBAL thread_pool_idle_timeout = 120;`
|
|
459
|
+
4. 永久调整:修改 MySQL 配置文件
|
|
460
|
+
|
|
461
|
+
### 表进入黑名单
|
|
462
|
+
|
|
463
|
+
#### Schema Evolution 失败
|
|
464
|
+
|
|
465
|
+
- 现象:表状态自动变为停止同步,提示 `pk column different`、`pk column type mismatch`、`invalid modify column`
|
|
466
|
+
- 原因:源端表结构发生 Lakehouse 不支持的变更(PK 字段列表变更、PK 字段类型变更、字段类型不兼容修改)
|
|
467
|
+
- 解决:
|
|
468
|
+
1. 检查源端表结构,修改为正确的结构
|
|
469
|
+
2. 对停止同步的表执行"重新同步",全量同步完成后增量数据会继续同步
|
|
470
|
+
|
|
471
|
+
## 已知局限
|
|
472
|
+
|
|
473
|
+
- **不支持 SQL 创建 MySQL/PostgreSQL Connection**:`CREATE STORAGE CONNECTION TYPE MYSQL/POSTGRESQL` 会报错 `no connection info factory for connection kind 'STORAGE', type 'mysql'`。CDC 数据源必须通过 Studio UI 数据源管理配置
|
|
474
|
+
- Schema Evolution 暂不支持变更字段类型、不支持自动新增表
|
|
475
|
+
- 仅支持带主键(PK)字段的表,非 PK 表不支持同步
|
|
476
|
+
- 源端不同库表中若存在主键相同的数据,同步结果会异常
|
|
477
|
+
- 无特别必要不要手动创建/修改/删除目标表(系统自动管理目标表结构)
|
|
478
|
+
- MySQL 不支持的字段类型:`year`(取值不对应)
|
|
479
|
+
- PostgreSQL 不支持的字段类型:`varbit`、`bytea`、`TIMETZ`、`interval`、`NAME`(取值不对应),`NUMERIC`、`decimal`(精度不对应,目标端精度更高)
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## cz-cli 替代路径
|
|
484
|
+
|
|
485
|
+
> 仅在 cz-cli 可用且 MCP 不可用时使用本节。步骤编号与上方 MCP 路径对应。
|
|
486
|
+
> 所有操作通过 `cz-cli agent run` 委托给内置 agent 完成,agent 内置完整的 Studio MCP 工具访问能力。
|
|
487
|
+
|
|
488
|
+
### 模式一:整库镜像同步(cz-cli 版)
|
|
489
|
+
|
|
490
|
+
```bash
|
|
491
|
+
# 步骤 1-9 合并:让 agent 完成完整的 CDC 整库同步任务创建
|
|
492
|
+
cz-cli agent run "创建 CDC 多表实时同步任务,将 MySQL 数据源 <source_ds_name> 的 <database> 库整库镜像同步到 Lakehouse,使用 Sync VCluster,任务名 cdc_<database>,放在 <folder_name> 文件夹下" \
|
|
493
|
+
--format a2a --dangerously-skip-permissions
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
对于需要精细控制的场景,可拆分步骤:
|
|
497
|
+
|
|
498
|
+
```bash
|
|
499
|
+
# 步骤 1:确认 Sync VCluster 可用
|
|
500
|
+
cz-cli agent run "列出所有可用的 VCluster,筛选 vcluster_type 包含 SYNC 的集群,确认有可用的 Sync VCluster" \
|
|
501
|
+
--format a2a --dangerously-skip-permissions
|
|
502
|
+
|
|
503
|
+
# 步骤 2:查找数据源
|
|
504
|
+
cz-cli agent run "列出所有已配置的数据源,包括 MySQL 类型(ds_type=5)的,记录源端和目标端 Lakehouse 数据源名称" \
|
|
505
|
+
--format a2a --dangerously-skip-permissions
|
|
506
|
+
|
|
507
|
+
# 步骤 3-4:创建并配置 CDC 任务(整库镜像)
|
|
508
|
+
cz-cli agent run "创建 CDC 多表实时同步任务(task_type=281),pipeline_type 为整库镜像(3),源端 datasource=<source_ds_name>,同步 <database> 库的所有表,目标 Lakehouse,任务名 cdc_<database>" \
|
|
509
|
+
--format a2a --dangerously-skip-permissions
|
|
510
|
+
|
|
511
|
+
# 步骤 5:提交部署
|
|
512
|
+
cz-cli agent run "提交 CDC 任务 cdc_<database>,使其开始持续运行" \
|
|
513
|
+
--format a2a --dangerously-skip-permissions
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
### 模式二:多表镜像同步(cz-cli 版)
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
# 创建多表镜像 CDC 任务(指定具体表)
|
|
522
|
+
cz-cli agent run "创建 CDC 多表实时同步任务(task_type=281),pipeline_type 为多表镜像(1),源端 datasource=<source_ds_name>,同步 <database> 库中的表 <table1>, <table2>, <table3>,目标 Lakehouse,任务名 cdc_<database>_selected" \
|
|
523
|
+
--format a2a --dangerously-skip-permissions
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
### 模式三:多表合并同步(cz-cli 版)
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
# 创建多表合并 CDC 任务(多源表合并到单目标表)
|
|
532
|
+
cz-cli agent run "创建 CDC 多表实时同步任务(task_type=281),pipeline_type 为多表合并(2),源端 datasource=<source_ds_name>,将 <database> 库中的多张表合并同步到 Lakehouse 目标表,任务名 cdc_<database>_merged" \
|
|
533
|
+
--format a2a --dangerously-skip-permissions
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
### 运维监控(cz-cli 版)
|
|
539
|
+
|
|
540
|
+
```bash
|
|
541
|
+
# 查看任务状态
|
|
542
|
+
cz-cli agent run "查看 CDC 任务 <task_name> 的运行状态和详细信息" \
|
|
543
|
+
--format a2a --dangerously-skip-permissions
|
|
544
|
+
|
|
545
|
+
# 查看运行记录
|
|
546
|
+
cz-cli agent run "查看 CDC 任务 <task_name> 的最近运行记录" \
|
|
547
|
+
--format a2a --dangerously-skip-permissions
|
|
548
|
+
```
|