简述
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 任务详情页,点击 参数修改,即可调整
主键模型
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
Client地址:为StarRocks提供给MySQL Client的服务端口,CloudCanal主要用其查询库表的元数据信息
Http地址:为用于接收stream load的http请求
任务创建
任务管理->任务创建
选择 源 和 目标 数据库
点击 下一步
选择 增量同步,并且启用 全量数据初始化
不勾选 DDL 同步(暂不支持)
点击下一步
选择订阅的表,结构迁移自动创建的表为主键模型的表,因此暂不支持无主键表
点击下一步
配置列映射
点击下一步
创建任务
查看任务状态。任务创建后,会自动完成结构迁移、全量、增量阶段。
任务性能调优(option)
对于高流量的场景,建议使用 4G 及以上的任务规格配置,并且对相关参数进行调优,调优建立在任务无 GC 问题、对端 StarRocks 没有 compaction 瓶颈的情况下。
任务详情->功能列表->参数设置
全量迁移参数调整
增量同步参数调整
总结
本文简单介绍了如何使用 CloudCanal 进行MySQL到StarRocks 的数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧。
常见FAQ
默认任务参数配置下,如果导入数据过于频繁可能会任务异常,这时候可以调节上文提到的fullBatchWaitTimeMs和increBatchWaitTimeMs参数或者调整StarRocks的Server侧的合并策略。下图为StarRocks官方提供的常见问题FAQ
更多精彩
加入社区
我们创建了 CloudCanal 微信交流群,在里面,您可以得到最新版本发布信息和资源链接,您能看到其他用户一手评测、使用情况,您更能得到热情的问题解答,当然您还可以给我们提需求和问题。扫描下方二维码,添加我们小助手微信suhuayue001拉您进群,备注: 加 CloudCanal 群