本文将以MySQL分库分表实时写入实时数仓Hologres场景为例,为您介绍分库分表写入Hologres数据集成最佳实践。
doc_mysql1
实际业务场景下数据同步通常不能通过一个或多个简单离线同步或者实时同步任务完成,而是由多个离线同步、实时同步和数据处理等任务组合完成,这就会导致数据同步场景下的配置复杂度非常高。尤其是在MySQL分库分表的场景下,上游的数据库和表非常多,都需要同时写入一张Hologres表,如果同时配置多个任务会导致配置非常复杂且运维困难。
针对以上痛点,DataWorks数据集成一键同步解决方案提供了面向业务场景的同步任务配置化方案,支持不同数据源的一键同步功能,方便业务简单快速的进行数据同步。
同步数据至Hologres时,目前仅支持将数据写入分区表子表,暂不支持写入数据至分区表父表。
order_db01
order_db02
order_db03
t_order
t_user
同时,为了便于在Hologres表里区分某条记录属于源端哪个物理库、物理表,则需要在Hologres表中添加上三个附加字段(src_datasource、src_database、src_table),标识某条记录的来源数据源实例、数据库以及表,这三个附加字段和物理表中的主键在Hologres里构成了唯一键,保障了某条物理表记录在Hologres逻辑表里的唯一性,全量数据迁移以及实时增量数据写入时均需要对这三个附加字段赋值。
t_order.*
t_user.*
cdo_
order_db.*
order_db
src_datasource
src_database
src_table
步骤一:选择同步方案
步骤二:网络与资源配置
步骤三:选择要同步的库表
步骤四:目标表映射
步骤五:报警配置
步骤六:高级参数配置
步骤七:DDL能力配置
步骤八:资源组配置
步骤九:执行同步解决方案任务
在此步骤中,您需要进入数据集成页面配置同步解决方案。
进入 数据集成 。
进入数据集成页面。
登录 DataWorks控制台 ,单击左侧导航栏的 数据集成 ,在下拉框中选择对应工作空间后单击 进入数据集成 。
在数据集成 首页 单击 创建我的数据同步 ,进入同步方案配置页面。
在 任务名称 区域配置当前方案名称。
在 同步类型 区域根据业务需要选择待同步的源端数据源类型,目标端数据源选择Hologres,并选择 Hologres整库全增量 方案, 同步步骤 按需要进行选择。
源端选择环境准备步骤中已创建的数据源 doc_mysql1 ,目标数据源为DataWorks工作空间引擎绑定的默认Hologres数据源。并测试连通性。
您需要根据业务需要定义读取源端数据库所使用的编码格式,及同步任务区源端数据库读取数据时所使用的时区。
此步骤中,您可以在 源端库表 区域选择 doc_mysql1 数据源下需要同步的源端表,您可以选择该MySQL实例下的所有库、表进行同步,或者选择部分表进行同步。
在上一步骤选择完需要同步的表后,将自动在此界面展示当前待同步的表,但目标表的相关属性默认为待映射状态,需要您定义并确认源表与目标表映射关系,即数据的读取与写入关系,然后单击 刷新映射 后才可进入下一步操作。您可以直接刷新映射,或自定义目标表规则后,再刷新映射。
您可以选中待同步表后,单击 批量刷新映射 ,未配置映射规则时,默认根据源表所在库和表,写入至与源库同名的Hologres schema;与源表同名的Hologres表,若目标端不存在同名库与表时,将自动新建。
在进行自定义目标schema、表名和表字段等操作时,若在表格中未找到相关信息列,您可以单击表格右上方 按钮自定义表格的显示列。
基于当前业务场景,我们需要将源端分表数据写入目标单表,并为写入的Hologres表添加统一前缀,自定义写入的schema名称,具体操作如下:
定义目标schema名与表名映射规则。
需求
配置过程
自定义写入的目标schema名称
创建schema名变换规则 schema_rule1_pre ,操作如下:
schema_rule1_pre
在 目标Schema名映射自定义 列,单击 编辑 按钮。
由于需要将多个物理库实时写入一个目标Schema下面,所以需要将物理库和目标schema进行转换(默认是源库写入目标同名schema)。
如上图所示,使用 源端数据库名 将源端数据库名作为目标schema名称,并且将所有满足 order_db.* 正则表达式的源库写入目标Hologres名为 order_db 的schema中。
自定义写入的目标表名称
创建表名变换规则 table_rule ,操作如下:
table_rule
在 目标表名映射自定义 列,单击 编辑 按钮。
由于需要将分库分表的物理表写入Hologres对应的逻辑表,所以需要通过正则来定义目标表的匹配规则。
如上图所示,使用 源端表名 将源端表名作为目标表名称。并且将源端表名中符合 t_order.* 正则表达式的表数据写入到Hologres名为 t_order 表中;将源端表名中符合 t_user.* 正则表达式的表数据写入到Hologres名为 t_user 表中。
应用目标schema名与表名映射规则。
选中待同步的所有表,单击 批量修改 > 目标Schema名映射自定义 或 批量修改 > 目标表名映射自定义 ,并分别选择已创建的规则 schema_rule1_pre 和 table_rule ,使规则生效。自定义目标规则后的映射关系如下图所示。
同步任务存在默认的源端字段类型与目标端字段类型映射,您可以单击表格右上角的 编辑字段类型映射 ,自定义源端表与目标端表字段类型映射关系,配置完后单击 应用并刷新映射 。本案例使用默认映射规则,无须设置。
当目标Hologres表为 待建立 状态时,您可以为目标表在原有表结构基础上新增字段,用于记录源端表数据来源。
基于当前案例,为了便于在Hologres表里区分某条记录属于源端哪个物理库、物理表,则需要在Hologres表中添加上三个附加字段(src_datasource、src_database、src_table),标识某条记录的来源数据源实例、数据库以及表,这三个附加字段和物理表中的主键在Hologres里构成了唯一键,保障了某条物理表记录在Hologres逻辑表里的唯一性,全量数据迁移以及实时增量数据写入时均需要对这三个附加字段赋值。具体操作如下:
在列表底部选择 批量修改 > 目标表结构_批量修改和新增字段 ,为目标表添加字段( src_datasource 、 src_database 、 src_table )。
。
您也可以通过单击 目标表名 列的 按钮,对目标表单独添加附加字段。
在列表底部选择 批量修改 > 目标表字段赋值 为上述步骤中添加的三个字段分别赋值为变量 DATASOURCE_NAME_SRC 、 DB_NAME_SRC 、 TABLE_NAME_SRC 。
DATASOURCE_NAME_SRC
DB_NAME_SRC
TABLE_NAME_SRC
在赋值时支持赋值常量与变量,您可通过 图标切换赋值模式。
数据集成提供默认DML处理规则,同时,您可以根据业务需要在此界面对写入Hologres的DML命令定义处理规则。
单表定义规则:单击表格列 DML规则配置 > 配置DML ,对目标表单独定义DML规则。
批量定义规则:在列表底部选择 批量修改 > DML规则配置 。
为避免任务出错导致业务数据同步延迟,您可以对实时同步子任务设置不同的报警策略。操作如下:
单击页面右上方的 报警设置 ,进入实时同步子任务报警设置页面。
单击 新增报警 ,配置报警规则。
此处定义的报警规则,将对该任务产生的实时同步子任务生效,您可在任务配置完成后,进入 实时同步任务 界面查看并修改该实时同步子任务的监控报警规则。
管理报警规则。
对于已创建的报警规则,您可以通过报警开关控制报警规则是否开启,同时,您可以根据报警级别报警给不同的人员。
数据集成提供数据库最大连接数,并发度等配置的默认值,如果需要对任务做精细化配置,达到自定义同步需求,您可对参数值进行修改,例如通过最大连接数上限限制,避免当前同步方案对数据库造成过大的压力从而影响生产。操作如下:
请在完全了解对应参数含义情况下再进行修改,以免产生不可预料的错误或者数据质量问题。
单击界面右上方的 高级参数配置 ,进入高级参数配置页面。
在 高级参数配置 页面基于业务需要与资源组、数据库实际情况配置各项参数。
配置区域
参数
说明
读端配置
离线任务源端最大连接数
支持您通过该参数控制当前同步方案所产生的所有离线子同步任务可占用的源端数据库连接数,即同一时间内,当前同步解决方案所产生的所有离线子同步任务读取数据库的并发数上限。
实际执行时,当前任务同时运行的离线子任务并发度将不会超过此值。
配置 运行时配置 中的 离线同步任务并发数 时请参考该值。
写端配置
实时任务写端最大连接数
支持通过该参数控制当前同步方案所产生的所有实时子任务可占用的写端数据库最大连接数。
实际执行时,当前任务所产生的实时同步子任务并发度将不会超过此值。
配置 运行时配置 中的 实时任务并发数 时请参考该值。
离线任务写端最大连接数
支持通过该参数控制当前同步方案所产生的单个离线同步子任务可占用的写端数据库最大连接数。
运行时配置
离线同步任务并发度
单个离线同步子任务的并发数,建议按照对应规格的资源组支持的最大并发数合理分配。
因为离线同步任务个体配置差异较大,实际执行时不一定可以达到此处配置的并发数。收费将按照实际执行的并发数收费。详情请参见: 性能指标 。
离线任务是否开启限流
提供限流功能控制同步流量。
不限流:默认不限流,在不限流的情况下,任务将在所配置的并发数的限制基础上,提供现有硬件环境下最大的传输性能。
限流:考虑到速度过高可能对数据库造成过大的压力从而影响生产,数据集成同时提供了限速选项,您可以通过限流控制同步速率,从而保护读取端数据库,避免抽取速度过大,给数据库造成太大的压力。限速最小配置为1MB/S,最高上限为30MB/s。
离线任务限流大小
当开启限流场景下,您可以在此配置单个离线子任务流量大小。
流量度量值是数据集成本身的度量值,不代表实际网卡流量。通常,网卡流量往往是通道流量膨胀的1至2倍,实际流量膨胀取决于具体的数据存储系统传输序列化情况。
实时任务并发度
单个实时同步子任务并发数。
是否支持自动创建Schema
定义当前任务是否允许自动创建Hologres Schema。
来源数据源会包含许多DDL操作,您可以根据业务需求,单击界面右上方 DDL能力配置 ,进入DDL能力配置页面对不同的DDL消息设置同步至目标端的处理策略。不同DDL消息处理策略请参见: DDL消息处理规则 。
运行当前同步解决方案将产生多个离线同步子任务和一个实时同步子任务,您可以单击界面右上方的 资源组配置 ,查看并切换当前的任务所使用的离线同步资源组和实时同步资源组。
离线和实时同步任务推荐使用不同的资源组,以便任务分开执行。如果选择同一个资源组,任务混跑会带来资源抢占、运行态互相影响等问题。例如,CPU、内存、网络等互相影响,可能会导致离线任务变慢或实时任务延迟等问题,甚至在资源不足的极端情况下,可能会出现任务被OOM KILLER杀掉等问题。
在 数据集成 主站页面,单击左侧菜单栏的 同步任务 界面,找到已创建的同步方案。
单击操作列的 启动/提交执行 按钮,启动同步的运行。
单击操作列的 执行详情 ,查看任务的详细执行过程。
完成任务配置后,您可以对已创建的任务进行管理、执行加减表操作,或对任务配置监控报警,并查看任务运行的关键指标等。详情请参见: 全增量同步任务运维 。