StarRocks跨集群数据迁移工具

StarRocks 管理员 跨集群数据表同步工具

  • 集成MySQL外表,ENGINE=MYSQL。
  • 集成StarRocks外表,ENGINE=OLAP。
  • 集成Jdbc Catalog。
  • 集成官方starrocks-cluster-sync-2.0
  • 集成兼容所有StarRocks版本
  1. 支持一键创建MySQL、StarRocks外表,支持跨集群克隆表结构,迁移数据。
  2. 支持迁移方式v1:源、目标容量级别,容量批次导入。
  3. 支持迁移方式v2:源、目标分区稽核,单分区覆写。
  4. 支持迁移方式v3:源、目标分区稽核,多攒批覆写。
  5. 支持迁移方式v4:仅对目标分区稽核,单分区覆写。
  6. 支持迁移方式v5:仅对目标分区稽核,多攒批覆写。
  7. 支持指定一次性初始化,或流式增量。
  8. 支持定时通知迁移进度到飞书群组。
  9. 支持自定义迁移分区。
  10. 支持自定义设置作业并发度。

模拟场景:

全量同步(表结构+数据)- MYSQL外表方式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库表名 /支持同步多个库表,逗号分隔/> -r -i -o mysql

  1. 自动创建外表
  2. 自动创建内表
  3. 自动insert写入。
  4. 走9030端口




迁移完成,推送飞书。

3个亿,4分钟。

多表同步-t <t1,t2,t3…>


迁移完成,推送飞书。

这里出现的信息有:总耗时,task耗时,同步状态,表名,源端数据量,目标数据量。

全量同步(表结构+数据)- STARROCKS外表方式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库表名 /支持同步多个库表,逗号分隔/> -r -i -o starrocks

  1. 自动创建外表
  2. 自动创建内表
  3. 自动insert写入。
  4. 走9020端口

starrocks olap外表传输有个缺点就是,需要等元数据缓冲完成后,才支持写入,否则failed。

全量同步(表结构+数据)- 官方元数据模式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库表名 /支持同步多个库表,逗号分隔/> -r -i -o meta

  1. 自动匹配配置文件
  2. 自动默认一次性写入
  3. 走9030、9020端口


等程序走完就好

全量同步(表结构)- 库级别结构模式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库名 /支持同步多个库,逗号分隔/> -r -i -o ghost -level db

由于这个模式只是同步表结构,速度很快,也可以使用-thread xx指定线程数进行加快同步

同理,每个模式运行结束后,都会收集同步状态、结果发送到飞书

再登录目标集群,表结构已经过来

全量/分区同步(表结构+数据)- Jdbc Catalog 源、目标容量级别,容量批次导入v1模式

全量一次性模式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库名 /支持同步多个库,逗号分隔/> -r -i -o v1 -a <jdbc catalog名称>

单例批次同步模式

-batch

这种特点是,当带宽能力不足,且担心打满带宽时,可以自动分配区间逻辑表达式进行task级别拆分同步,同时可以支持使用-speed参数(默认1GB)进行分配,比如4GB的表,当不指定时,默认1,那么就会生成4个逻辑表达式,如果使用-speed 2,那么就会生成2个逻辑表达式。
每个task完成后自动汇报耗时。

当然,也可以使用-batchcheck 参数预览每个单例切割出来的逻辑表达式

例如表大小4GB,-peed=1时

例如表大小4GB,-speed=4时

把所有的task都收拢,然后一起上报给job级别,最后发出finished通知

发出Fail通知,原因是目标表中已经存在数据了,但是没有进行truncate直接写入,导致数据翻倍,可使用-truncate进行生成写入的前置清空

当然,类似这种数据翻倍的清空,就是两端数据不一致,稽核失败。也可以选择使用补数模式

-complement 补数模式,自动稽核两端数据,保证数据量高度一致

如遇到解析异常事件,会弹出最佳同步模式推荐

使用v2模式进行稽核

直接识别每个分区,两端数据量,出现差异直接分区级别overwrite覆写,覆写完成后进行二次稽核并汇报

v2这种方式由于是单个分区写,线程池默认是3,相对比确实会慢一些,但想单分区多并发写入也是可以的,-thread 10(默认3),代表支持同时10个task在running

全量/分区同步(表结构+数据)- Jdbc Catalog 源、目标分区稽核,单分区覆写v2模式

exlSchema -source <源集群简称> -target <目标集群简称> -t <库名 /支持同步多个库,逗号分隔/> -r -i -o v2 -a <jdbc catalog名称> -complement

上面描述了,v2模式单分区覆写,优点是稳定,缺点也是很明显的,为什么会有v2的出现,假如一个表,单分区是10GB+,整表是TB级别的,这个时候为了尽量降低带宽的影响时,v2模式就能发挥稽核效率了。 但它确实也是龟速爬行,于是v3模式出现了。

全量/分区同步(表结构+数据)- Jdbc Catalog 源、目标分区稽核,多攒批覆写v3模式

攒批写入,-o v3

当指定并发数-thread 10时

此时可以预览 select * from information_schema.task_runs where state=‘RUNNING’

task完成,汇报

当线程池逐渐减少时,代表还剩下多少个task在running

结束

全量/分区同步(表结构+数据)- Jdbc Catalog 仅对目标分区稽核,单分区覆写v4模式

-o v4

全量/分区同步(表结构+数据)- Jdbc Catalog 仅对目标分区稽核,多攒批覆写v5模式

-o v5

v4,v5模式的使用场景:当目标表的数据量比源端多时,v4/v5不进行清理源端分区,不强调两端一致。只将源端存在,目标不存在的分区进行加载写入。如源端不存在,但目标存在的数据、分区,只对目标表进行处理。

无论是v1-v5模式,有的分区源端存在,但目标不存在的情况下,使用-add参数在数据同步时会自动生成添加分区语句。

v1-v5模式依赖Jdbc Catalog,如果启动时没有指定-a 那么将触发提示词

如:

源端表属性
39

目标端表属性
40

目标分区数大于源端,这个时候触发v4,v5模式,将以目标分区、数据量为准。假如出现源与目标分区级别数据量不一致,将触发进行二次稽核同步模式

配置说明

配置文件.exlSchema.yaml,同样需要维护starroks登录信息元数据表。

  1. 支持集成官方的starrocks-cluster-sync,如用到官方scs,则需要在配置中填写目录
  2. 支持自定义飞书群组机器人key
  3. 支持自定义飞书代理地址
  4. -h 查看程序帮助,有兴趣使用的可自行探索

@https://github.com/chengkenli/exlSchema

1赞