首页 > 数据库 >5分钟搞定MySQL/PostgreSQL/Oracle到StarRocks数据迁移同步-CloudCanal实战

5分钟搞定MySQL/PostgreSQL/Oracle到StarRocks数据迁移同步-CloudCanal实战

时间:2022-08-30 15:34:19浏览次数:71  
标签:www StarRocks PostgreSQL CloudCanal askcug image com png

## 简述

CloudCanal 2.1.0.x 版本开始支持 StarRocks 作为对端的数据迁移同步能力

本文通过 MySQL->StarRocks 的数据迁移同步案例简要介绍这个源端的能力。链路特点:

- 结构迁移、全量迁移、增量同步(数据)、数据校验俱全
- 流程全自动化

## 使用须知

- 支持的StarRocks版本为: 1.18.x、1.19.x、2.0.x
- 支持的源端数据源类型为: **Oracle**/**PostgreSQL**/**Greenplum**/**MySQL**,本文主要以 MySQL 源端为例说明使用方法。
- 校验任务只支持主键模型的 StarRocks 表,源端表需要有主键

## 技术点

### 基于 StreamLoad 的导入方式

StarRocks 提供了多种导入方式。CloudCanal 采用了 StreamLoad 的方式进行导入,源端的消息会转成字节流,通过 HTTP 协议发往 StarRocks。

相比直接通过 SQL 写入的方式,StreamLoad 方式会有更好的性能,写入的数据直接经 FE 转发给 BE 处理。如果直接采用 SQL 写入,在 FE 侧,会有额外的 SQL 解析开销。

> tips: CloudCanal默认采用 \u0001、\u0003作为 StreamLoad 导入的列分隔符和行分隔符。

### 丰富的配置

CloudCanal 提供了 StreamLoad 可配置的丰富参数,包括:

- **connectionTimeoutSec** 参数
- 表示导入请求的超时时间(单位:秒)
- **loadExecMemLimitMb** 参数
- 表示导入内存限制
- **timezone** 参数
- 默认东八区,指定导入所使用的时区
- 该参数会影响所有导入涉及的和时区有关的函数结果。

### 可配置的写入停顿控制

过快的写入会导致 StarRocks 来不及 compaction,从而产生异常。CloudCanal 提供了两个任务参数,支持在一批数据写入后自动停顿一段时间,避免这种问题。参数为:

- **fullBatchWaitTimeMs** 参数
- 全量批之间写入停顿间隔,单位毫秒,默认 10ms
- **increBatchWaitTimeMs** 参数
- 增量批之间写入停顿间隔,单位毫秒,默认 100ms

CloudCanal 任务详情页,点击 **参数修改**,即可调整

![e6865230-17ad-461c-b1bf-c4001cd30e10-image.png](https://www.askcug.com/assets/uploads/files/1641537740037-e6865230-17ad-461c-b1bf-c4001cd30e10-image-resized.png)

![691f1b73-d67d-4b31-ad6d-d123d7443fed-image.png](https://www.askcug.com/assets/uploads/files/1641537719478-691f1b73-d67d-4b31-ad6d-d123d7443fed-image-resized.png)

### 主键模型

StarRocks 作为实时数仓,采用**主键模型**或者**聚合模型**较多。CloudCanal默认采用**主键模型**,能够实时同步源端的 **INSERT**/**UPDATE**/**DELETE**。

> tips: 表结构对于实时数仓实际读写性能影响非常大,CloudCanal 默认提供的结构迁移能力并没有提供诸如**分区**、**分桶**等设置,用户如需使用,可按照需求提前创建好表结构,再通过 CloudCanal 进行数据迁移同步。

### UPDATE/DELETE 操作的处理

基于 StreamLoad 的写入方式,实际写入对端的操作均为 INSERT。CloudCanal 同步时会自动将 UPDATE/DELETE 转成INSERT语句,并修改 **__ops** 值,StarRocks 会自动进行compaction。

### 转义支持

StarRocks 不支持 **\n** 等特殊符号写入,CloudCanal 任务通过参数设置(**enableEscape**参数) 开启自动转义。

## 操作示例

- CloudCanal 社区版部署,参见 [社区版安装文档](https://doc-cloudcanal.clougence.com/operation/install_linux)
- 准备好源端和目标端数据库以及对应的测试数据

### 添加数据源

- 登录 CloudCanal 平台
- 数据源管理->新增数据源
- 选择自建数据库中StarRocks
![f374af27-fee3-4697-887d-9f3fb9533015-image.png](https://www.askcug.com/assets/uploads/files/1640762140098-f374af27-fee3-4697-887d-9f3fb9533015-image-resized.png)

- Client地址: 为StarRocks提供给MySQL Client的服务端口,CloudCanal主要用其查询库表的元数据信息
- Http地址: Http地址主要用于接收stream load的http请求

### 任务创建

- **任务管理**->**任务创建**
- 选择 **源** 和 **目标** 数据库
- 点击 下一步
![e292dbc4-b704-4dc0-b9ee-42f0d36b490e-image.png](https://www.askcug.com/assets/uploads/files/1640766474176-e292dbc4-b704-4dc0-b9ee-42f0d36b490e-image-resized.png)

- 选择 **增量同步**,并且启用 **全量数据初始化**
- 不勾选 DDL 同步(暂不支持)
- 点击下一步
![cb223937-cfcb-4348-82d7-ad712e58fa28-image.png](https://www.askcug.com/assets/uploads/files/1640766676141-cb223937-cfcb-4348-82d7-ad712e58fa28-image-resized.png)

- 选择订阅的表,**结构迁移自动创建的表为主键模型的表,因此暂不支持无主键表**
- 点击下一步
![9ef5e6ff-55d2-4c60-8d06-5ea1ec7aa3a0-image.png](https://www.askcug.com/assets/uploads/files/1640767043267-9ef5e6ff-55d2-4c60-8d06-5ea1ec7aa3a0-image-resized.png)
- 配置列映射
- 点击下一步
![4257f866-73ff-4be8-bfa3-856a9a1378cc-image.png](https://www.askcug.com/assets/uploads/files/1640767007811-4257f866-73ff-4be8-bfa3-856a9a1378cc-image-resized.png)
- 创建任务
![1c3d5908-0a28-46e5-93d7-62bb2fec1957-image.png](https://www.askcug.com/assets/uploads/files/1640767171613-1c3d5908-0a28-46e5-93d7-62bb2fec1957-image-resized.png)
- 查看任务状态。任务创建后,会自动完成结构迁移、全量、增量阶段。
![c5104d1a-fa40-46f2-af20-278fad1c8f76-image.png](https://www.askcug.com/assets/uploads/files/1640834528285-c5104d1a-fa40-46f2-af20-278fad1c8f76-image-resized.png)

## 任务性能调优(option)

对于高流量的场景,建议使用 **4G** 及以上的任务规格配置,并且对相关参数进行调优,调优建立在任务无 GC 问题、对端 StarRocks 没有 compaction 瓶颈的情况下。

- **任务详情**->**功能列表**->**参数设置**
![37ea6a32-6195-4ba6-9536-a84b36808732-image.png](https://www.askcug.com/assets/uploads/files/1640767478766-37ea6a32-6195-4ba6-9536-a84b36808732-image.png)
- 全量迁移参数调整
![b101094f-914b-401b-8b02-dcff2f9c4ec2-image.png](https://www.askcug.com/assets/uploads/files/1640767542249-b101094f-914b-401b-8b02-dcff2f9c4ec2-image-resized.png)
- 增量同步参数调整
![c2f8457f-b49e-428f-9120-b875e7b87fc3-image.png](https://www.askcug.com/assets/uploads/files/1640833376700-c2f8457f-b49e-428f-9120-b875e7b87fc3-image-resized.png)

## 总结

本文简单介绍了如何使用 CloudCanal 进行MySQL到StarRocks 的数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧。

# 常见FAQ

默认任务参数配置下,如果导入数据过于频繁可能会任务异常,这时候可以调节上文提到的fullBatchWaitTimeMs和increBatchWaitTimeMs参数或者调整StarRocks的Server侧的合并策略。下图为StarRocks官方提供的常见问题FAQ

![77b7f260-455d-4a9d-a684-dbc0863e6365-image.png](https://www.askcug.com/assets/uploads/files/1641544220945-77b7f260-455d-4a9d-a684-dbc0863e6365-image.png)

## 更多精彩

- [5分钟搞定 MySQL 到 ClickHouse 宽表构建和同步-CloudCanal实战](https://www.askcug.com/topic/249)
- [5分钟搞定 MySQL 到 ElasticSearch 宽表构建和同步-CloudCanal实战](https://www.askcug.com/topic/240)
- [5分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇-CloudCanal实战](https://www.askcug.com/topic/189)
- [5分钟搞定 MySQL 到 ElasticSearch 迁移同步-CloudCanal 实战](https://www.askcug.com/topic/97)
- [5分钟搞定 MySQL 到 MySQL 异构在线数据迁移同步-CloudCanal 实战](https://www.askcug.com/topic/85)
- [5分钟搞定 MySQL 到 TiDB 的数据同步 - CloudCanal实战](http://www.askcug.com/topic/106)
- [5分钟搞定SQLServer到MySQL数据迁移同步-CloudCanal实战 - CloudCanal实战](http://www.askcug.com/topic/258)

标签:www,StarRocks,PostgreSQL,CloudCanal,askcug,image,com,png
From: https://www.cnblogs.com/clougence/p/16639468.html

相关文章

  • 京东云PostgreSQL在GIS场景的应用分享
    在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中......
  • PostgreSQL快速导入千万条数据
    为了与MySQL做个对比,做一个PG的数据导入测试,使用COPY方式,测试环境保持一致,具体如下所述。一、测试环境■48CPU/376GCPU(s):48Thread(s)percore:......
  • postgresql update duplicate key value violates unique constraint
    问题使用SQLupdate语句,出现duplicatekeyvalueviolatesuniqueconstraint错误解决方法//把ModuleIDstring`json:"module_id"binding:"......
  • postgresql从库查询被终止怎么办
    一,问题描述:PG流复制场景下,默认配置下,如果在PG从库执行长时间的查询,会出现查询的报错。提示ERROR:cancelingstatementduetoconflictwithrecoveryDETAIL:Userqu......
  • postgresql去重,只取时间最新的一条数据【转】
     昵称: zjyss原文地址:https://www.cnblogs.com/zjyss/p/15701439.html 1.可以循环表取出相同字段的第一条去建立临时表或视图2.使用pg的row_number函数对相同字段记......
  • 创建postgresql外部文件表
     【1】创建file_fdwcreateextensionfile_fdw;createserverserver_file_fdwforeigndatawrapperfile_fdw; [2]建立外部表 就以常见emp表为例; create......
  • postgresql使用group by进行数据去重-2022新项目
    一、业务场景数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重。比如进行统计查询的时候,可以这样写sel......
  • postgresql用户与权限管理
    pg使用角色的概念管理数据库访问权限,角色是一系列相关权限的集合。为了管理方便,通常把一系列先关的权限赋予给一个角色,如果哪个用户需要这些权限,就把这些角色赋予给响应的......
  • Postgresql之基础
      在默认配置下,之允许本机访问Postgresql#切换到postgres用户su-postgresLastlogin:WedMar113:16:48CST2017onpts/1-bash-4.2$psqlpsql(9.2.1......
  • 【PostgreSQL】连接到PostgreSQL Server
    连接pg需要指定以下的参数:·主机地址·端口·数据库名·用户·密码 如果没有指定上面的参数的话,pg会从环境变量中寻找以下的变量值:·PGHOST或PGHOSTADDR·PG......