实时写入场景的用户痛点

实时写入场景的用户痛点

SQL 开发工作量大

对于一些还没有完成数仓建设的新业务,或是刚刚开始依托 StarRocks 进行 OLAP 平台建设的用户而言,在 StarRocks 中建表以承载 Mysql 同步过来的数据是第一步。在一些复杂的业务中,Mysql 中的表往往有几十上百张,每张表又有数十个字段,要把它们对应的 StarRocks 表的建表语句全部编写出来是一个很大的工作量。第一个痛点 StarRocks 建表的工作量大。

Flink 字段的数据类型映射关系复杂易错

在 StarRocks 中建表是第一步,建表完成之后,为了启动 CDC 任务,还需要在 Flink 中建立 Mysql 对应的 Source 表,以及 StarRocks 对应的 Sink 表,其中 Flink 建表时,每个字段的字段类型与 Mysql、与 StarRocks 的映射关系需要严格注意,对于动辄几十上百个需要字段的表,每个字段都需要查找对应在 Flink 的类型映射关系,尤其令开发人员痛苦。因此,第二个痛点是上下游表与 Flink 字段的数据类型映射关系复杂,容易出错。

Schema 变更操作繁琐

第三个痛点来自于业务数据 Schema 的变化,据 Fivetran 公司调查,约有 60% 的公司数据 Schema 每个月都会发生变化,30% 的公司数据 Schema 每周都会发生变化。对于 Mysql 表中字段的增删改,用户希望在不影响 CDC 任务的情况下,将 Schema 变化同步到下游的 StarRocks。目前常用的方案,是在手动停止任务后,更改 StarRocks 和 Mysql 的 Schema,更改 Flink 侧的 Sink 和 Source 表结构,通过指定 savepoints 的方式再次启动任务。Schema 变更的操作繁琐,无法自动化是第三个痛点。

数据同步任务占用资源多

第四个痛点,是在表的数量多、实时增量数据量大的场景下,CDC 任务占用的内存和 cpu 资源较高,出于节省成本的考虑,用户希望尽可能的在资源利用方面进行优化。

接下来,我们来看针对这些痛点,EMR-StarRocks 在与 Flink 深度结合方面做了哪些优化,提供了什么样的解决方案。

CTAS&CDAS

EMR-StarRocks 与 Flink 团队推出的 CTAS&CDAS 功能主要是针对前三个痛点研发的一个解决方案。通过 CTAS&CDAS,可以使用一条 SQL 语句,完成 StarRocks 建表、Flink-CDC 任务创建、实时同步 Schema 变更等原本需要多项繁杂操作的任务,令开发和运维的工作量大大降低。

CTAS 介绍

CTAS 的全称是 create table as,语法结构如下:

CREATE TABLE IF NOT EXISTS runoob_tbl1 with (
'starrocks.create.table.properties'=' engine = olap primary key(runoob_id) distributed by hash(runoob_id ) buckets 8',
'database-name'='test_cdc',
'jdbc-url'='jdbc:mysql://172.16.**.**:9030',
'load-url'='172.16.**.**:8030',
'table-name'='runoob_tbl_sr',
'username'='test',
'password' = '123456',
'sink.buffer-flush.interval-ms' = '5000'
)
 as table mysql.test_cdc.runoob_tbl  /*+ OPTIONS (   'connector' = 'mysql-cdc',
  'hostname' = 'rm-2zepd6e20u3od****.mysql.rds.aliyuncs.com',
  'port' = '3306',
  'username' = 'test',
  'password' = '123456',
  'database-name' = 'test_cdc',
  'table-name' = 'runoob_tbl'  )*/;

通过 CTAS 的语法结构可以看到,除了集群信息和 DataBase 信息外,还有一个特殊配置 “starrocks.create.table.properties”,这是由于 Mysql 与 StarRocks 的表结构有一些不同,如 Key Type、分区、Bucket Number 等特殊配置,因此用它来承接 StarRocks 建表语句中字段定义后面的内容。

为了方便用户更快的建表,还设置了一个 Simple Mode,配置方式如下:

CREATE TABLE IF NOT EXISTS runoob_tbl1 with (
'starrocks.create.table.properties'=' buckets 8',
'starrocks.create.table.mode'='simple',
'database-name'='test_cdc',
'jdbc-url'='jdbc:mysql://172.16.**.**:9030',
'load-url'='172.16.**.**:8030',
'table-name'='runoob_tbl_sr',
'username'='test',
'password' = '123456',
'sink.buffer-flush.interval-ms' = '5000'
)
 as table mysql.test_cdc.runoob_tbl  /*+ OPTIONS (   'connector' = 'mysql-cdc',
  'hostname' = 'rm-2zepd6e20u3od****.mysql.rds.aliyuncs.com',
  'port' = '3306',
  'username' = 'test',
  'password' = '123456',
  'database-name' = 'test_cdc',
  'table-name' = 'runoob_tbl'  )*/;

开启 Simple Mode 之后,将默认使用 Primary Key 模型,默认使用 Mysql 中的主键作为 Primary Key,默认使用哈希 (主键) 进行分桶,这样,用户在启动 Simple Mode 对表使用 CTAS 语句时,就完全不需要关心 Mysql 中原表有哪些字段,字段名称是什么,主键是什么,只需要知道表名,就可以高效的完成 SQL 编写。

你可能感兴趣的:(mysql,数据库)