基于 API 的数据同步
简介
本文主要介绍 CloudCanal 如何让应用直接写数据到 CloudCanal Tunnel 数据源达到数据同步目标,包含以下特点:
- 对端数据库不开放公网端口
- 可接收大量客户端写入(http)
- 元数据可映射
- 基于 HTTPS 传输
- 具备用户名密码鉴权机制
- 不依赖消息等软件
技术点

Tunnel数据源
Tunnel 数据源本身并不是实体数据库,而是一组逻辑信息,包括
- ip(或域名)
- port
- 用户名
- 密码
- TLS 证书文件和密码
- 元数据
创建以 Tunnel 为源端的数据任务,启动后会监听配置的端口,并接收基于 HTTP 交互协议的请求。
元数据映射
Tunnel 数据源带有 schema(存储于CloudCanal kv配置表中), 所以针对这个数据源,我们模拟了表结构获取和迁移的过程,让其在任务创建和运维过程中如同一个真实存在的数据库。 一个真实的 Tunnel 数据源的元数据如下:
[
{
"db": "cc_virtual_db",
"schemas": [
{
"schema": "cc_virtual_schema",
"tables": [
{
"table": "WORKER_STATS",
"columns": [
{
"name": "ID",
"jdbcType": -5,
"typeName": "LONG",
"key": true
},
{
"name": "GMT_CREATE",
"jdbcType": 93,
"typeName": "TIMESTAMP",
"key": false
},
{
"name": "AUCRDT",
"jdbcType": 93,
"typeName": "TIMESTAMP",
"key": false
}
]
},
{
"table": "KBS_QUESTION",
"columns": [
{
"name": "ID",
"jdbcType": -5,
"typeName": "LONG",
"key": true
},
{
"name": "CATEGORY",
"jdbcType": 12,
"typeName": "STRING",
"key": false
}
]
}
]
}
]
}
]
我们可以通过结构迁移 (MySQL/SQLServer/Oracle -> Tunnel) 扩充它,或者直接通过 数据源管理->更多->查看配置-> dbsJson 进行修改。
操作示例
本示例使用 cloudcanal-tunnel-sdk 写作客户端应用,对端使用本地一个 MySQL 作为数据接收端。
环境准备
- 社区版(docker) 先修改 docker-compose.yml 端口映射再安装
- 此例以 18443 端口作为 Tunnel 数据源监听端口

- CloudCanal 上添加 Tunnel 数据源和目标数据源
