云服务器内容精选
-
DWS目的端数据源约束 类别 说明 适用版本 8.1.3、8.2.0及以上版本(除DWS 3.0)。 权限要求 表权限:账号需要对目标表有INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。 数据库限制 数据库中的对象名需要满足约束:长度不超过63个字符,以字母或下划线开头,中间字符可以是字母、数字、下划线、$。 使用限制 通用: 实时同步过程中,不支持IP、端口、账号、密码修改。 不支持同步到DWS无主键表。 不支持并发同步DWS列存表,会有分布式锁,并发更新时可能导致等锁、死锁,建议使用DWS行存或行列混存表,详情请参考DWS官方资料。 全量同步阶段: 任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量同步阶段: 增量同步过程中,不支持指定位置加列的DDL操作(例如ALTER TABLE ddl_test ADD COLUMN c2 AFTER/FIRST c1;),Migration会删除AFTER/FIRST属性,可能会导致列顺序不一致。 增量同步过程中,执行不幂等的DDL可能导致数据不一致(例如ALTER TABLE ddl_test ADD COLUMN c3 timestamp default now();),Migration会因数据库函数执行结果不幂等导致最终数据不一致。 增量同步过程中,库级同步不支持Online DDL,表级同步目前只支持某些云DMS产生的Online DDL。 增量同步过程中,支持同步的DDL类型有新建表、删除表、新增列、删除列、重命名表、重命名列、修改列类型、清空表,用户可以根据自身需求选择需要同步的DDL类型。 分库分表场景下,执行重命名列操作,必须停业务操作,不然会有数据不一致的风险。 分库分表场景下,推荐只同步新增列DDL,其他的DDL同步可能会因为目标表被修改而导致任务失败或数据不一致。 分库分表场景下,执行新增列时,需保证每张表加列的类型一致,否则有可能导致任务失败。 新增和修改表名、列名时不能超出63字符,否则任务会失败。 增量阶段,源数据库执行CHANGE COLUMN修改列信息,如果该列在目标DWS数据库中为分布列,则该语句会可能导致异常,因为DWS不支持修改分布列。 其他限制 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 Migration自动建表时,源库中char、varchar、nvarchar、enum、set字符类型长度在目标库会按照字节长自动扩大(因为DWS目标库为字节长)。 全量同步timestamp类型时,默认值中的on update current_timestamp语法将不会同步到目标库 GaussDB (DWS)中。 重命名表仅支持rename后库表在同步范围中的DDL操作(例如:RENAME TABLE A TO B,B需要在同步范围内)。 不建议在分库分表同步场景下的进行rename操作,可能会导致任务失败或数据不一致。
-
Hudi目的端数据源约束 类别 说明 适用版本 MRS 集群(3.2.0-LTS.x、3.5.x) Hudi版本(0.11.0) 权限要求 MRS用户需要拥有Hadoop和Hive组件的读写权限,建议参照下图所示角色及用户组配置MRS用户。 图1 MRS Hudi最小化权限 具体MRS集群角色权限管理请参考《MRS集群用户权限模型》。 数据库限制 Hudi的库名、表名、字段名仅支持数字、字母和下划线,且字段名必须以字母或下划线开头,建议尽量使用常规字符避免任务失败。 使用限制 通用: 实时同步过程中,不支持对MRS账号、密码修改。 实时同步过程中,对MRS Hadoop组件/角色做停止、重启等变更操作时Hadoop组件可能出现短暂不可用,从而导致实时同步任务异常。 在添加Hudi的配置参数时需要确保其为Flink on Hudi支持参数,否则可能导致任务失败。 部分Spark on Hudi参数在Flink on Hudi场景不适用或参数名不一致。 对于版本低于3.2.0-LTS1.5的MRS集群的Hudi MOR表,使用实时同步任务(Flink)增量同步数据后,不支持直接使用 CDM 或Spark SQL写入数据,需要先进行Compaction后方可写入。 建表: 请尽量避免对Hudi表的分区字段做Update,否则软删除场景会出现不同分区下主键重复的数据。请选择字段值相对稳定的列作为Hudi分区字段。 实时同步任务默认Hudi表中已存在三个审计字段:cdc_last_update_date(timestamp类型)、logical_is_deleted(boolean类型)、_hoodie_event_time(string类型),客户手动建表时需要添加三个审计字段,否则会导致任务异常。 手动创建Hudi表时如果字段名中存在大写字母,请确保该字段与源端表对应字段同名且大小写一致,否则会导致作业异常或数据迁移到目的端为null。 实时同步作业自动建表时会统一将Hudi表字段名建为小写。 作业稳定性: BLOOM索引的Hudi表存在内存开销比较大的情况,作业稳定性不足,请尽量使用BUCKET索引建表。 实时Compaction内存开销比较大,作业稳定性不足,请尽量使用离线Compaction。 Changelog表: Hudi开启changelog时,如果出现丢数,在通过Spark/Flink作业补数后,下游的Flink作业也需要做重启,否则可能出现changelog丢失,Flink状态不正确的问题。 当前没有方法对Hudi changelog表做到operation级(-U、+U、+I、-D数据)的补数,对changelog表的补数只能修复Spark查询时的数据一致性,Flink流读的数据一致性无法修复。 DDL同步: 不支持指定位置加列的DDL操作(例如ALTER TABLE ddl_test ADD COLUMN c2 AFTER/FIRST c1;),Migration会删除AFTER/FIRST属性,可能会导致列顺序不一致。 执行不幂等的DDL可能导致数据不一致(例如ALTER TABLE ddl_test ADD COLUMN c3 timestamp default now();),实时同步任务会因数据库函数执行结果不幂等导致最终数据不一致。 可识别的DDL类型有新建表、删除表、新增列、删除列、重命名表、重命名列、修改列类型、清空表,当前仅支持同步新增列操作到目的端Hudi,其余DDL可配置成忽略/异常。 分库分表场景下,执行新增列时,需保证每张表加列的类型一致,否则有可能导致任务失败。 源端出现修改列类型、删除列、重命名列时,需要及时停止实时同步任务,通过Spark SQL完成Hudi表的DDL变更,否则会导致作业失败或数据不一致问题。 新增列名时不能超出256字符,否则任务会失败。
-
Oracle源端数据源约束 类别 说明 适用版本 10、11、12、19版本。 权限要求 Oracle 库需要开启归档日志,同时需表查询权限和日志解析权限,开通对应权限详情请参考Oracle数据源如何开通归档日志、查询权限和日志解析权限?。 同步对象范围 支持同步的DML:包括INSERT、UPDATE、DELETE。 支持同步的DDL:新增列。 仅支持同步主键表。 不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。 数据库限制 源端数据库中的库名、表名、字段名不能包含:.-以及非ASCII字符,建议尽量使用常规字符避免任务失败。 使用限制 驱动包安装: 通用: 实时同步过程中,不支持IP、端口、账号、密码修改。 Oracle归档日志建议保留3天以上,否则可能因无法获取日志导致任务失败,特殊情况可能导致数据不一致或者丢失。 禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。 Oracle为源端时,暂不支持迁移CLOB、NCLOB和BLOB类型。 Oracle为源端时,暂不支持Oracle RAC集群。 Oracle为源端时,支持连接单实例的oracle备库,不支持RAC集群备库,备库读取时只支持读取archive log,不支持读取standby log。连接备库时建议oracle 设置定时归档,减少数据同步时延。 网络带宽建议大于100M/s。 全量同步阶段: 任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量同步阶段: 支持DML:包括INSERT、UPDATE、DELETE。 支持的DDL:新增列。 不支持混合分区表。混合分区表中的外部分区数据变更不产生DML日志,增量数据同步时无法获取变更信息,会存在数据不一致的风险。 表名和列名长度限制为30个字符。Oracle日志读取采用Oracle logminer,logminer限制了表名和列名在30个字符以内,详情请参见LogMiner分析日志相关介绍。 增量启动时,选择时间位点启动,请确保oracle数据库时区和数据库所在主机时区一致,才能保证增量位点的准确性。 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。 增量同步不支持同步或迁移触发器,需要关闭目标Oracle的触发器。 增量同步不支持同步或迁移存在外键约束的数据。 增量同步不支持同步或迁移使用Oracle Data Pump向源库导入的数据。 其他限制 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列若是非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。 Oracle为源端时全量+增量或增量作业,如果需要同步PDB库中的表,Oracle连接中需要填写CDB库的用户名和密码,不能为PDB用户名和密码,因为Oracle日志统一在存储在CDB库中,同时Oracle logminer只能运行在CDB库中。 全量和增量同步不支持隐藏列(UNUESD, INVISIBIE)。 DDL删除表时需执行“drop table test_table_name purage命令”。 Oracle数据库默认删除表是一个高危操作,执行"drop table test_table_name"命令时, Oracle会将该命令转换为“rename table test_table_name as xxxxx”, 即将该表重新命名为Oracle临时表空间中的一张待处理表,原表实际并未删除,migration默认直接忽略该语法;Oracle删除表语句"drop table test_table_name purage"会彻底删除表,migration会自动识别删除表并下发给下游。 不支持无主键表。 不支持DCL操作。 不支持同步或迁移连续的RENAME TABLE操作,否则可能会导致任务失败。 不支持同步或迁移全局临时表(任务正常运行)。 不支持同步或迁移含有默认值函数的表,否则会导致数据不一致。 不支持同步或迁移默认值中含有表达式的表。 不支持同步或迁移外部表。 不支持同步或迁移计算列、加密列。 不支持同步或迁移虚拟私有数据库(Virtual Private Database, VPD)。 不支持同步或迁移dbms_scheduler和dbms_job创建的job。 不支持同步或迁移Schema名称的变更操作。 不支持同步或迁移嵌套表,否则会导致任务报错。 不支持同步或迁移物化视图(Materialized View)。 不支持同步或迁移包含关键字或者特殊字符的属性名的DDL操作。 不支持ROWID变更操作(例如split partition、table move、table shrink、move partition key),否则可能会导致数据不一致或任务失败。 不支持Secure Sockets Layer(SSL)加密传输模式。 不支持Oracle Label Security模式。
-
SQLServer源端数据源约束 类别 说明 适用版本 企业版2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本。 权限要求 需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。 启动数据库及表的CDC能力。 启用数据库CDC。 USE YourDatabaseName; EXEC sys.sp_cdc_enable_db; -- 查看数据库是否启动CDC SELECT is_cdc_enabled, name FROM sys.databases WHERE name = 'YourDatabaseName' 启用表CDC。 EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', -- Schema @source_name = N'YourTable',-- 表名 @role_name = NULL,-- 可选,CDC访问角色名称 @supports_net_changes = 0; -- 查看表是否启动CDC SELECT name,is_tracked_by_cdc FROM sys.tables WHERE name = 'YourTable'; 源端SQLServer需要给管理中心数据连接中配置的用户赋予以下全部权限。 给用户添加数据库CONNECT, VIEW DATABASE STATE 权限。 USE YourDatabaseName; GRANT CONNECT, VIEW DATABASE STATE TO [YourUserName]; 给用户添加CDC schema的SELECT 权限。 USE YourDatabaseName; GRANT SELECT ON SCHEMA::[cdc] TO [YourUserName]; 给用户添加表的SELECT权限。 USE YourDatabaseName; GRANT SELECT ON OBJECT::[YourSchema].[YourTable] TO [YourUserName]; 同步对象范围 支持同步DML:包括INSERT、UPDATE、DELETE。 不支持同步DDL。 仅支持同步主键表。 不支持同步源数据库中开启TDE(Transparent Data Encryption)加密的数据库。 不支持列加密。 不支持同步自增属性列。 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。 数据库限制 源数据库如果开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”。 使用限制 通用:实时同步过程中,不支持IP、端口、账号、密码修改。 全量同步阶段:任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量同步阶段: 支持DML:包括INSERT、UPDATE、DELETE。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。 同步过程不支持修改作业中的表。 其他限制 支持目标数据库中的表比源数据库少列场景;也支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。
-
基本特性 实时数据集成为大数据开发提供了支撑,具有以下特性: 实时性:支持数据秒级同步。 可靠性:通过异常恢复,自动重试等多种机制确保数据的一致性和准确性。 多样性: 数据源多样性:源端和目的端有多种数据源可供选择,为用户提供了多种选择。 场景多样性:部分链路支持全量和增量同步,部分链路支持分库分表。 可维护性:支持作业监控和日志查看,方便运维人员进一步定位。 易用性:长界面更易操作,用户只需配置必要信息,学习成本减低。
-
功能概述 实时集成作业支持多种数据源、多种场景下的实时数据同步,用户可根据自主需求,一次性全量加实时增量同步多个库表,功能总览如下图所示。 图2 功能总览图 表1 基本功能 功能 描述 多种数据源间的数据同步 支持多种数据源链路组合,您可以将多种输入及输出数据源搭配组成同步链路进行数据同步。详情请参见支持的数据源。 复杂网络环境下的数据同步 支持云数据库、本地IDC、E CS 自建数据库等多种环境下的数据同步。在配置同步任务前,您可以根据数据库所在网络环境,选择合适的同步解决方案来确保数据集成资源组与您将同步的数据来源端与目标端网络环境已经连通,对应数据库环境与网络连通配置详情请参见:网络打通。 多类场景下的数据同步 支持单表、整库及分库分表实时增量数据同步。 单表同步:支持将源端一个实例下的单张表实时同步至目的端一个实例下的单张表。 整库同步:支持将源端一个实例下多个库的多张表批量实时同步到目的端一个实例下的多个库表,一个任务中最多支持200张目标表。 分库分表同步:支持将源端多个实例下多个分库的多张分表同步到目的端一个实例下的单个库表。 实时同步任务配置 支持通过简易的可视化配置完成实时数据同步。 数据源自定义参数配置。 图形化选择源端库表、正则匹配源端库表。 自定义源端与目的端库表匹配规则。 字段映射:附加字段、字段赋值(常量、变量、UDF)。 自动建表。 定义DDL消息处理策略。 实时同步任务运维 支持异常恢复、暂停恢复、动态增减表、配置告警、查看及导出任务日志等运维功能。
-
解决方案 PostgreSQL使用pgoutput插件进行增量逻辑解码,该插件依赖PUBLICATION。 查看发布的命令。 SELECT * FROM pg_publication; 如果名为dbz_publication的发布不存在,在启动migration作业后会自动用作业配置的账号创建publication,因此要提前给账号授权,或使用有权限的账号创建发布。 授权创建发布的命令: GRANT CREATE ON DATABASE "your_databasename" TO "your_user"; 创建发布的命令(如果不授权,需要手动创建发布): -- PostgreSQL版本大于等于13 CREATE PUBLICATION dbz_publication FOR ALL TABLES WITH (publish_via_partition_root = true) -- PostgreSQL版本小于13 CREATE PUBLICATION dbz_publication FOR ALL TABLES 如果名为dbz_publication的发布存在,要添加参数(PostgreSQL版本小于13可以忽略此操作)。 ALTER PUBLICATION dbz_publication SET (publish_via_partition_root = true); PostgreSQL增量位点启动和逻辑复制槽推进都需要查询数据库wal日志信息,需要获取pg_ls_waldir()函数查询权限。 确认作业配置的账号是否有执行pg_ls_waldir()函数的权限。 SELECT has_function_privilege('your_user', 'pg_ls_waldir()', 'EXECUTE'); SELECT pg_ls_waldir() -- 最直观判断是否能执行成功 如果没有权限,用超级用户(SUPERUSER)或具有 pg_monitor 角色权限的用户(root)授权。 GRANT pg_monitor TO your_user; -- 授权 REVOKE pg_monitor from your_user; -- 撤权 重新用作业配置的账号登录到数据库重复步骤1操作确认权限是否生效。 GaussDB增量位点启动和逻辑复制槽推进都需要查询数据库wal日志信息,需要获取pg_ls_waldir()函数查询权限。 确认作业配置的账号是否有执行pg_ls_waldir()函数的权限。 SELECT pg_ls_waldir() -- 如果没权限,会报错:“only system/monitor admin can check WAL directory!” 如果没有权限,用超级用户(SUPERUSER)或具有 monitor 角色权限的用户(root)授权。 ALTER USER your_user MONADMIN -- 授权 ALTER USER your_user NOMONADMIN -- 撤权 重新用作业配置的账号登录到数据库重复步骤1操作确认权限是否生效。
-
解决方案 修改Migration实时集成作业配置。 Migration任务中必须关闭异步compaction动作,同时将clean和archive关闭。具体来说,可以在“Hudi表属性全局配置”或单表的“表属性编辑”中配置下表所示参数。 表1 Hudi表参数 参数名 参数值 含义 compaction.schedule.enabled true 开启compaction计划生成 compaction.delta_commits 60 compaction计划生成的compaction次数触发周期 compaction.async.enabled false 关闭异步compaction clean.async.enabled false 清理历史版本数据文件 hoodie.archive.automatic false Hudi commit文件老化的开关 图1 关闭Migration compaction任务 如上配置项配置完成后,作业启动后不再进行compaction任务,只会定期生成compaction计划,Spark SQL作业可以通过“run compaction on”命令执行compaction计划。 compaction计划一定需要Migration任务生成,然后交给Spark执行,否则会有Hudi Timeline的冲突,导致Spark compaction作业执行失败。 创建Spark SQL周期性Compaction任务。 前往 DataArts Studio 数据开发界面,参考《开发批处理单任务SQL作业》创建Spark SQL作业。 图2 创建Spark SQL单任务作业 配置与Hudi相对应的Spark数据连接,并选中需要操作Hudi表对应的数据库。 图3 配置连接与数据库 根据实际情况配置compaction的调度周期。 图4 配置调度周期 Hudi数据表Compaction规范 参考Hudi数据表Compaction规范填写Spark SQL的compaction语句,提交并运行作业。 图5 提交并运行作业
-
解决方案 对于不同的数据源其使用的端口也不尽相同,具体可通过查看各数据源官方文档确定具体端口。 下表提供部分数据源端口情况,仅供参考。 表1 数据源使用端口概览 数据源 涉及端口 MySQL 3306 DWS 8000 PostgreSQL 5432 Oracle 1521 Kafka 非安全:9092/9094 安全:9093/9095 MRS Hudi MRS Hudi所使用端口较为复杂,具体请参考《MRS集群服务常用端口列表》。 图1 MRS Hudi安全组规则示例