有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

背景信息及特性支持

支持 MySQL、TDSQL-C MySQL、PostgreSQL、Mongo 内整个实例或库表数据实时同步至 Kafka 中:
MySQL、TDSQL-C MySQL、PostgreSQL 等来源端支持 DDL 变更监控,支持实例、库、表级数据变更监控。
Kafka 目标端支持 Topic 自动创建,支持指定 Partition 分区策略。

条件与限制

如需使用自动创建 Topic 能力,请提前在 Kafka 服务端设置:
auto.create.topics.enable=true
开启自动创建 Topic 功能后,目标 Topic 需遵守 CKafka/kafka Topic 命名规则,以防止任务运行时 Topic 创建失败。
Kafka 开启自动创建 Topic 时,请合理配置好分区数,避免造成性能问题。

操作步骤

步骤一:创建整库同步任务

进入配置中心 > 实时同步任务页面后,单击新建整库迁移任务。

步骤二:链路选择

在首页卡片中选择同步至 Kafka 目标端的链路。




步骤三:数据来源设置

步骤四:数据目标设置




参数
说明
数据源
选择需要同步的目标数据源。
序列化格式
支持 canal-json 和 debezium 两种格式。
同步至多 Topic
默认打开:此选项下可实现来源数据与目标 Topic 多对多映射,任务执行过程中将根据策略匹配对应 Topic 的名称。
关闭:手动输入或者选择目标 Topic 名称,后续所有数据将统一写入该 Topic 内。
支持自动创建 Topic
打开后,若 Topic 不存在时系统将根据 Topic 名匹配规则自动创建 Topic。
注意:
此功能需保证 Kafka 已开启自动创建,请提前在 Kafka 服务端设定:
auto.create.topics.enable=true
Topic 匹配策略
与来源表同名:默认使用与来源表同名的 Topic 。
自定义:根据定义策略规则匹配 Topic 。
分区规则
配置 topic partition 分区映射(轮询写入分区、根据表名分区、根据来源表主键分区):
轮询写入分区:轮询(Round Robin)上游数据写入到每个 partition。
根据表名写入分区:根据上游数据中的表名hash映射写入每个 partition。
根据来源表主键分区:根据上游数据中的主键数据内容 hash 映射写入每个 partition。
指定分区:
写入指定单分区:输入分区序号,所有消息仅写入到固定分区。
根据数据源写入多分区:同一行设置的数据源将统一写入对应分区:
数据源:数据源范围为所有来源端配置的数据源名称,支持多选,同行内,已选数据源不可重复选择。
分区号:输入分区序号。
支持新增/删除管理。
根据表规则写入多分区:支持输入库、表正则进行对象匹配,符合匹配规则的对象写入到指定分区中,规则之间顺序执行,已匹配库表不参与后续规则匹配。
自定义:支持使用 “内置参数” 拼接写入分区规则,设定后将根据分区规则对应的值对消息进行 hash 分区。




步骤五:配置运行资源和策略




脏数据策略:提供 cos 归档和不归档两种方案。
cos 归档:将无法写入的脏数据进行归档,需要配置 cos 数据源、存储桶、存储目录、内容分隔符及换行符。
不归档:不需要做其他操作。

步骤六:配置预览及任务提交




序号
参数
说明
1
提交
将当前任务提交至生产环境,提交时根据当前任务是否有生产态任务可选择不同运行策略:
若当前任务无生效的线上任务,即首次提交或线上任务处于“失败”状态,可直接提交。
若当前任务存在“运行中”或“暂停”状态的线上任务需选择不同策略。停止线上作业将抛弃之前任务运行位点,从头开始消费数据,保留作业状态将在重启后从之前最后消费位点继续运行。



说明:
单击立即启动任务将在提交后立即开始运行,否则需要手动触发才会正式运行。
2
锁定/解锁
默认创建者为首个持锁者,仅允许持锁者编辑任务配置及运行任务。若锁定者5分钟内没有编辑操作,其他人可点击图标抢锁,抢锁成功可进行编辑操作。
3
前往运维
根据当前任务名称快捷跳转至任务运维页面。
4
保存
预览完成后,可单击保存按钮保存整库任务配置。仅保存的情况下,任务将不会提交至运维中心。
任务提交检测



参数
说明
检测存在异常
支持跳过异常直接提交,或者终止提交。
检测仅存在警告及以下
可直接提交。

提交结果




任务提交中:
展示提交进度百分比。
提示用户勿刷新/关闭页面,文案:当前任务已提交成功,可前往运维进行任务状态及数据管理。
任务提交结果-成功:
展示任务提交成功结果。
提示成功及后续跳转:文案 “提交成功,10秒后将跳转至当前任务运维详情页面” “当前任务已提交成功,可前往运维进行任务状态及数据管理”。
展示任务提交失败原因:
失败原因返回。

后续步骤

完成任务配置后,您可以对已创建的任务进行运维及监控告警,如对任务配置监控报警,并查看任务运行的关键指标等。详情请参见 实时运维

附录:Canal-json/Debezium 数据格式样例

Canal-json
{
"data": [
{
"id": "2",
"name": "scooter33",
"description": "Big 2-wheel scooter233",
"weight": "5.11"
}
],
"database": "pacino99",
"es": 1589373560000,
"id": 9,
"isDdl": false,
"mysqlType": {
"id": "INTEGER",
"name": "VARCHAR(255)",
"description": "VARCHAR(512)",
"weight": "FLOAT"
},
"old": [
{
"weight": "5.12"
}
],
"pkNames": [
"id"
],
"sql": "",
"sqlType": {
"id": 4,
"name": 12,
"description": 12,
"weight": 7
},
"table": "products999",
"ts": 1589373560798,
"type": "UPDATE"
}
Debezium
{
"schema": {
"type": "struct",
"fields": [
{
"type": "struct",
"fields": [
{
"type": "int32",
"optional": false,
"field": "id"
},
{
"type": "string",
"optional": false,
"field": "first_name"
},
{
"type": "string",
"optional": false,
"field": "last_name"
},
{
"type": "string",
"optional": false,
"field": "email"
}
],
"optional": true,
"name": "mysql-server-1.inventory2.customers2.Value",
"field": "before"
},
{
"type": "struct",
"fields": [
{
"type": "int32",
"optional": false,
"field": "id"
},
{
"type": "string",
"optional": false,
"field": "first_name"
},
{
"type": "string",
"optional": false,
"field": "last_name"
},
{
"type": "string",
"optional": false,
"field": "email"
}
],
"optional": true,
"name": "mysql-server-1.inventory2.customers2.Value",
"field": "after"
},
{
"type": "struct",
"fields": [
{
"type": "string",
"optional": false,
"field": "version"
},
{
"type": "string",
"optional": false,
"field": "connector"
},
{
"type": "string",
"optional": false,
"field": "name"
},
{
"type": "int64",
"optional": false,
"field": "ts_ms"
},
{
"type": "boolean",
"optional": true,
"default": false,
"field": "snapshot"
},
{
"type": "string",
"optional": false,
"field": "db"
},
{
"type": "string",
"optional": true,
"field": "table"
},
{
"type": "int64",
"optional": false,
"field": "server_id"
},
{
"type": "string",
"optional": true,
"field": "gtid"
},
{
"type": "string",
"optional": false,
"field": "file"
},
{
"type": "int64",
"optional": false,
"field": "pos"
},
{
"type": "int32",
"optional": false,
"field": "row"
},
{
"type": "int64",
"optional": true,
"field": "thread"
},
{
"type": "string",
"optional": true,
"field": "query"
}
],
"optional": false,
"name": "io.debezium.connector.mysql.Source",
"field": "source"
},
{
"type": "string",
"optional": false,
"field": "op"
},
{
"type": "int64",
"optional": true,
"field": "ts_ms"
}
],
"optional": false,
"name": "mysql-server-1.inventory.customers.Envelope"
},
"payload": {
"op": "c",
"ts_ms": 1465491411815,
"before": null,
"after": {
"id": 12003,
"first_name": "Anne322",
"last_name": "Kretchmar3222",
"email": "annek@noanswer.org3222"
},
"source": {
"version": "1.9.6.Final",
"connector": "mysql",
"name": "mysql-server-1",
"ts_ms": 0,
"snapshot": false,
"db": "inventory333",
"table": "customers433",
"server_id": 0,
"gtid": null,
"file": "mysql-bin.000003",
"pos": 154,
"row": 0,
"thread": 7,
"query": ""
}
}
}