简述
CloudCanal 2.1.0.x 版本开始支持 StarRocks 作为对端的数据迁移同步能力
本文通过 MySQL->StarRocks 的数据迁移同步案例简要介绍这个源端的能力。链路特点:
基于 StreamLoad 的导入方式
StarRocks 提供了多种导入方式。CloudCanal 采用了 StreamLoad 的方式进行导入,源端的消息会转成字节流,通过 HTTP 协议发往 StarRocks。
相比直接通过 SQL 写入的方式,StreamLoad 方式会有更好的性能,写入的数据直接经 FE 转发给 BE 处理。如果直接采用 SQL 写入,在 FE 侧,会有额外的 SQL 解析开销。
tips: CloudCanal默认采用 \u0001、\u0003作为 StreamLoad 导入的列分隔符和行分隔符。
丰富的配置
CloudCanal 提供了 StreamLoad 可配置的丰富参数,包括:
connectionTimeoutSec 参数可配置的写入停顿控制
过快的写入会导致 StarRocks 来不及 compaction,从而产生异常。CloudCanal 提供了两个任务参数,支持在一批数据写入后自动停顿一段时间,避免这种问题。参数为:
fullBatchWaitTimeMs 参数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 平台
数据源管理->新增数据源
选择自建数据库中StarRocks
Client地址: 为StarRocks提供给MySQL Client的服务端口,CloudCanal主要用其查询库表的元数据信息
Http地址: Http地址主要用于接收stream load的http请求
任务管理 -> 任务创建
选择 源 和 目标 数据库
点击 下一步
任务性能调优(option)
对于高流量的场景,建议使用 4G 及以上的任务规格配置,并且对相关参数进行调优,调优建立在任务无 GC 问题、对端 StarRocks 没有 compaction 瓶颈的情况下。
任务详情 -> 功能列表 -> 参数设置