You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
解决方案
MySQL_to_ByteHouse 云数仓版实时整库同步
复制全文
下载 pdf
MySQL_to_ByteHouse 云数仓版实时整库同步

一键实时整库同步方案支持全增量一体化同步,本实践中,先将 MySQL 源端全量数据通过离线任务同步方式迁移,然后再通过实时同步增量任务,将增量数据采集至目标端 ByteHouse 云数仓版(ByteHouse CDW)数据库表中。
您也可以选择单独进行实时增量数据同步,该场景适用于您已经通过其他方式将全量数据同步至 ByteHouse CDW,本文为您介绍如何创建一键实时同步,将全量和增量数据同步至 ByteHouse CDW 数据库中。

1 前置操作

  1. 已开通并创建 DataLeap 项目,创建的全量增量任务均会同步到该项目下。详见新建项目
  2. 已创建合适资源规格的独享数据集成资源组,并将其绑定至创建成功的 DataLeap 项目下。购买操作详见独享集成资源组管理,项目绑定操作详见数据集成资源组
  3. 已开通全域数据集成(DataSail)产品。详见服务开通
  4. 已完成数据源来源和目标端的准备,创建源端数据源 MySQL 实例,目标端火山引擎 ByteHouse云数仓版。详见创建 MySQL 实例开通ByteHouse云数仓版服务

2 注意事项

  1. 同步解决方案同时支持选择的表数量目前上限为 2000 张,但建议先以 100 张以下表数量来试用。
  2. 目标端 ByteHouse CDW 库需要提前在集群中先创建好,暂不支持在解决方案中自动创建。且当 ByteHouse CDW 数据源接入方式为连接串模式,配置解决方案中, 写入 ByteHouse CDW 时,暂不支持自动建表操作。采用此接入方式,需手动在目标库中创建相应的数据表,或在数据源配置时选择接入方式为”火山引擎 ByteHouse 云数仓版“。
    创建 ByteHouse 数据库表,详见数据库表及视图

3 数据源配置

3.1 MySQL数据源配置(源端)

在配置实时整库同步解决方案前,您需在数据源管理界面中,配置来源端 MySQL 数据源。详见 MySQL 数据源配置

注意

MySQL 数据源将直接采集 MySQL Binlog 日志,进行数据实时读取,您需保障数据库已开启 Binlog 协议,且数据源配置信息内的用户名,需要有 Binlog 的 REPLICATION 操作权限。权限详见配置 MySQL 数据源

3.2 ByteHouse CDW数据源配置(目标端)

在配置实时整库同步解决方案前,您需在数据源管理界面中,配置目标端 ByteHouse CDW数据源。详见 ByteHouse云数仓版 数据源配置

注意

ByteHouse CDW 数据源在配置解决方案时必须配置 API token 信息。

ByteHouse 云数仓版网络配置方式

网络配置方式

操作方式

火山引擎内网

ByteHouse CDW 同时也支持通过 VPC 内网形式访问连接,主账号需进入 ByteHouse CDW 租户管理界面绑定相关网络信息。操作流程如下:

  1. 主账号登录 ByteHouse CDW 控制台
  2. 在上方导航栏中,切换至租户管理界面。
  3. 网络信息 > 私网域名处,单击绑定按钮,并在右侧弹窗中完成绑定私网操作。
  4. 绑定私网时选择的 VPC、子网、安全组等信息,需和独享集成资源组中绑定的网络信息保持一致,以保障与独享集成资源组网络互通
    Image

更多绑定操作,详见设置网络信息

说明

  • ByteHouse CDW 服务中,私有网络仅可绑定一次,绑定后不可修改,需谨慎选择。
  • 若 ByteHouse CDW 服务绑定的私网信息与独享集成资源组网络信息存在不同的 VPC 情况时,您需额外通过云企业网VPN 连接方式,来实现不同 VPC 间的网络互通。

4 新建数据实时整库同步

数据源配置操作准备完成后,您可开始进行实时整库同步方案配置:

  1. 登录 DataSail 控制台

  2. 在左侧导航栏中选择数据同步方案,进入同步方案配置界面。

  3. 单击目录树中项目选择入口,选择已创建的 DataLeap 项目。

  4. 单击右上角新建数据同步解决方案按钮,下拉选择实时整库同步按钮,进入整库实时同步方案配置界面。按照以下配置,完成方案新建。

5 基本配置

解决方案基本配置步骤参数说明如下。

5.1 基本信息

基本配置参数说明如下表所示。其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

配置项

说明

*链路类型

下拉选择来源和目标端数据源类型,此处来源类型选择 MySQL,目标数据源类型选择 ByteHouse云数仓版。

*方案名称

输入整库实时同步方案名称,如 MySQL2BHCDW。只允许字符.、字母、数字、下划线、连字符、[]、【】、()、()以及中文字符,且需在127个字符以内。

方案描述

输入此方案的描述信息,方便后续维护管理。

*保存至

单击选择框,在弹窗中选择方案保存路径,此路径为数据开发项目中的任务路径。创建方式详见任务目录树管理

5.2 网络与资源配置

在网络与资源配置中,配置数据来源/目标端数据源信息、集成资源组信息。其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

配置项

说明

*数据来源

下拉选择数据源管理中创建成功的数据源。
若此前仍未创建相应数据源或需修改数据配置:
Image

  • 您可单击下方新建数据源按钮,在右侧弹窗的数据源管理界面,进行数据源的创建。
  • 也可在对应数据源名称后,单击编辑按钮,进行数据源配置编辑操作。

数据缓存

在实时同步解决方案执行过程中,您可按需选择采集数据时是否使用缓存配置方式:

  • 勾选使用缓存时,流程中会新增数据缓存配置流程,缓存说明详见“7 数据缓存配置”。
  • 不勾选,不使用缓存,通过直连数据库的方式采集源端数据。

本实践中通过直连方式进行读取,不使用缓存。

*数据目标

下拉选择数据源管理中创建成功的目标端数据源名称。

*离线/实时集成任务资源组(离线全量/实时增量)

下拉选择 DataLeap 项目控制台中已绑定的独享数据集成资源组:

  • 选择的资源组,需要确保能与源端、中间缓存数据源、目标端数据源连通,您可单击下方的测试连通性按钮,测试选择的资源组是否可以和各数据源连通成功。
    您可以将鼠标移动至测试连通性按钮上方,单击查看详情,可查看各数据源的连通性详情与测试结果信息。
  • 您也可以单击资源组管理按钮,前往资源组管理界面进行资源组的查看或新建等操作,详见资源组管理

5.3 资源组高级配置(任务高级参数配置)

您可在资源组高级配置中,配置离线全量同步、实时增量同步、任务调度等运行配置信息。

  1. 离线全量同步
    设置解决方案中离线全量任务的运行参数情况。其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

    配置项

    说明

    *离线集成任务资源组

    默认选择在网络与资源配置中选择好的独享数据集成资源组。您也可下拉选择已在 DataLeap 项目控制台中绑定的其他独享数据集成资源组。

    *默认 Quota 数

    设置可同时提交执行的集成任务数量,可根据独享集成资源组规格进行配置,如资源组的大小为 40CU,则 Quota 配置需必须小于 20(40/2),否则会因资源问题导致任务执行时异常。

    说明

    您也可按需勾选“每次提交执行时不询问”选项,建议您勾选。
    若不勾选,方案每次提交执行时,在执行详情 > 任务 Quota 检测步骤中,需要人工进行 Quota 数确认。
    Image

    *期望最大并发数

    设置离线任务同步时,可以从源端并行读取或并行写入目标端的最大线程数。
    并发数影响数据同步的效率,并发设置越高对应资源消耗也越多,由于资源原因或者任务本身特性等原因,实际执行时并发数可能小于等于设置的期望最大并发数。

    集成高级参数设置

    打开高级参数输入按钮,根据实际业务要求,以 Key\Value 形式,在编辑框中输入离线任务所需的高级参数。可参考下方任务通用高级参数表,更多参数详见高级参数

    集成高级参数配置示例:

    分类

    参数名

    默认值

    说明

    MySQL

    job.reader.reader_fetch_size

    10000

    JDBC 方式读,每次拉取的数据条数。

    job.reader.query_timeout_seconds

    300

    JDBC 方式读取数据,设定读取超时时间,单位秒。

    job.reader.connection_parameters

    JDBC 参数 ,问号后全部参数

    job.reader.shard_split_mode

    accurate

    JDBC 连接分片参数,指定计算分片的模式:

    1. accurate:精确分片,按照 job.reader.reader_fetch_size 的大小进行准确的分片,速度较慢,但是可以保证下游文件大小基本一致。
    2. quick:非精确分片,按照 job.reader.reader_fetch_size 进行模糊分片,速度较快,但无法保证下游文件大小一致。
    3. parallelism:非精确分片,按照执行的并发度进行分片,速度较快,但无法保证下游文件大小一致。
    4. nosplit:不分片,在任务量较小的情况下可以用此模式。

    ByteHouse CDW

    job.writer.flush_interval

    60000

    写入 buffer 刷新时间。默认 60000 毫秒。

    job.writer.buffer_count

    8192

    写入 buffer 记录条数。默认 8192。

    job.writer.query_timeout

    30000

    设定查询超时退出时间,默认 30000 毫秒。

    job.writer.skip_delete_task

    false

    写入 ByteHouse CDW 是通过 导入任务方式,默认任务执行完,删除导入任务;
    通过此参数,可设置跳过删除导入任务 ;
    适用场景:需要在 ByteHouse CDW 控制台查看导入服务日志。

    job.writer.cfs_write_batch_size

    4096/8192

    • 动态分区默认 4096
    • 非动态分区默认 8192

    job.writer.virtual_warehouse

    可通过该高级参数,指定 ByteHouse CDW 中任务导入所需的计算组信息。计算组操作详见 ByteHouse CDW 计算组

    任务通用

    job.common.is_use_batch_mode

    true

    是否batch模式

    • true:flink 任务 batch 模式,在资源有限情况,部分taskmanager 也可运行任务
    • false:flink 任务 pipeline 模式,适用数据量大时,读写同时进行

    job.reader.reader_parallelism_num

    读并发

    job.writer.writer_parallelism_num

    写并发

    Flink 资源参数

    job.common.flink_tm_vcores

    1.0

    每个 Task Manager 使用的 CPU 核数。
    取值说明:必须大于或等于 0.5,且必须是 0.5 的倍数。

    job.common.slots_per_tm

    2

    每个 Task Manager 默认 slot 的数量。

    job.common.flink_tm_slot_memory

    2048

    每个 Task Manager 中的各个 slot 的内存大小,单位为 MB。
    取值说明:每个 Task Manager 的 CPU 和内存(GB)的比例,必须满足:flink_tm_vcores : (flink_tm_slot_memory [GB] * slots_per_tm) = 1:2 或 1:4。
    取值示例:flink_tm_vcores = 4.0,slots_per_tm = 2,则 flink_tm_slot_memory 必须为 4GB 或 8GB,即配置为 4096 或 8192。

    job.common.flink_tm_task_off_heap_memory

    0.125

    每个 Task Manager 的堆外内存占总内存的比例。

    job.common.flink_tm_managed_memory_ratio

    0.2

    每个 Task Manager 的托管内存占总内存的比例。

    job.common.flink_tm_network_max

    2g

    每个 Task Manager 的网络内存的最大值,单位为 GB。
    取值说明:配置时使用小写字母 g,比如:2g。

    job.common.flink_jm_vcores

    1

    Flink Job Manager 的 CPU 核数。
    取值说明:不得小于 0.5,且必须是 0.5 的倍数。

    job.common.flink_jm_memory

    4096

    Flink Job Manager 的总内存大小,单位为 MB。
    取值说明:Job Manager 的 CPU 和内存(GB)的比例,必须满足:flink_jm_vcores : flink_jm_memory [GB] = 1:2 或 1:4。
    取值示例:flink_jm_vcores = 2.0,则 flink_jm_memory 必须为 4GB 或 8GB,即配置为 4096 或 8192。

    job.common.flink_jm_off_heap_memory

    0.125

    Flink Job Manager 的堆外内存占总内存的比例。

  2. 实时增量同步
    设置解决方案中实时增量任务的运行参数情况。其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

    配置项

    说明

    *实时集成任务资源组

    默认选择在网络与资源配置中选择好的独享数据集成资源组。您也可下拉选择已在 DataLeap 项目控制台中绑定的其他独享数据集成资源组。

    *资源设置

    实时任务的资源设置支持默认自定义两种配置方式,可设定单 TaskManager CPU 数量单 TaskManager 内存大小JobManager CPU 数量等参数。
    其中自定义方式设置时,平台会按固定比例协助您合理分配资源:例如,您选择 “单 TaskManager CPU 数” 或 “JobManager CPU 数” 后,平台会展示对应不同规格的内存大小供选择。

    说明

    默认设置中,各运行资源设置如下:

    • 单 TaskManager CPU 数:2
    • 单 TaskManager 内存:4096 MB
    • 单 TaskManager slot 数:4
    • JobManager CPU 数:1
    • JobManager 内存:2048 MB

    *镜像版本

    全域数据集成产品版本更新速度相对较快,解决方案中的实时增量任务需配置流式镜像版本号,建议您下拉选择当前推荐标签的镜像版本号。

    集成高级参数设置

    打开高级参数输入按钮,根据实际业务要求,以 Key\Value 形式,在编辑框中输入实时任务所需的高级参数。可参考下方集成高级参数表,更多支持参数详见高级参数

    Flink 运行参数设置

    支持输入 Flink 相关的动态参数和执行参数,可参考下方 Flink 运行参数表,更多具体参数设置详见 Flink 官方文档

    • 实时增量同步高级参数示例

      分类

      参数名

      默认值

      说明

      Binlog

      job.reader.poll_interval_ms

      500

      默认 500 毫秒
      读 binlog 刷新时间,
      场景:调小此参数,提高实时性

      job.reader.debezium

      配置示例:{"database.history.skip.unparseable.ddl": "true","skipped.operations":"d,u"}

      • 忽略特殊不能解析的 ddl
        "database.history.skip.unparseable.ddl": "true"

      • binlog 忽略sql 操作配置:
        "skipped.operations":"d"
        取值这几个: d,c,u

        • c for inserts/create,
        • u for updates,
        • d for deletes,
        • t for truncates,
        • none to not skip any operations.

        默认 : truncate operations are skipped.
        参考官网:https://debezium.io/documentation/reference/stable/connectors/mysql.html#mysql-property-skipped-operations

      job.common.checkpoint_interval

      900000

      设定 Checkpoint 刷新时间

    • Flink 运行参数示例:

      参数名称

      默认值

      说明

      taskmanager.memory.managed.size

      每个 Task Manager 的托管内存占总内存大小
      推荐配置:200m (实时任务使用较少)

      taskmanager.memory.network.fraction

      每个 Task Manager 的网络内存的占比
      推荐配置:0.05 实时任务使用较少)

  3. 调度设置
    离线全量任务还需要任务调度资源组,来支持任务下发分配至独享数据集成资源组中运行,目前调度资源组支持选择公共调度资源组独享调度资源组管理

资源组高级配置完成后,单击配置窗口右上角关闭按钮,退出配置窗口,并检查基本配置所有参数无误后,单击右下角下一步按钮,进行方案的数据缓存配置。

6 映射配置

在映射配置界面中,您需完成数据来源库表与库表映射规则匹配策略:

6.1 数据源配置

进行来源库表的选择,其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

配置项

说明

*数据源

默认展示在网络与资源配置中选择的数据来源名称。

*表选择模式

支持通过指定表或正则方式进行表的选择:

  • 指定表:您可手动指定选择一个库中的部分表进行实时同步。

    注意

    指定表模式,后续无法自动响应新增表 DDL 消息。

  • 正则:您可通过正则匹配的方式,监控指定库,并同步对应库下所有符合规则的表。

指定表模式

*数据表

指定表模式选择时,在左侧您可选择来源数据库表信息,以整库,或单表多表形式展开进行勾选需要同步的库表,取消勾选便可撤回已选中的库表。

说明

  1. 数据库下没有表存在时,不支持勾选同步。
  2. 单次同时支持选择的表数量上限为 2000 张。
  3. 源端为 MySQL 时,通过 Like 形式创建的表,暂时不支持同步,无法获取其 Schema 信息。

正则模式

*源库、源表选择限定条件

正则模式选择时,您可通过设置源库、源 Schema、源表的限定条件,来获取源表信息。
Image

  • 单击添加规则按钮,完成限定条件规则的添加,数据库、Schema、源表条件支持添加多个规则,取合集;
    • 限定条件:您可通过指定源库、源表的名称来限定,也可通过正则表达式匹配的方式,快速获取源端库表信息。
    • 类型:依据限定条件中输入的条件,下拉选择匹配的类型,支持正则个例类型配置。
  • 源库、源表限定条件,可支持批量输入,单击批量输入按钮,在弹窗中输入限定条件表达式,示例如下:
    [ {"filterPattern":".*", "filterType":"FULL", "filterAction":"INCLUDE" } ]
    • filterType 可选:个例-FULL、正则-REG
    • filterAction 可选:INCLUDE

    注意

    当前批量输入的内容将会全量替换已手动添加的规则,请谨慎操作!

  • 删除:您也可以单击操作列下的删除按钮,完成规则删除。

正则模式选择时,单击获取源表按钮,平台根据源库、源表限定条件的设置,自动加载符合条件的表。

注意

  • 若上方正则限定条件配置修改后,您需再次单击获取源表按钮,来刷新正则所匹配的表数量。

6.2 数据转换配置

DataSail 实时整库同步解决方案,支持添加自定义 SQL 转换规则。它支持将源端采集的数据,对其进行各种数据转换操作,以满足各类业务场景需求。您可按实际业务需求进行配置,操作详见8.2 数据转换配置

6.3 目标库表映射配置

来源库表选择完成后,您便可进行后续的映射规则配置。

说明

在进行源表和目标库表映射时,您可以单击右侧的全屏显示按钮,从而全屏配置表映射,以便更清晰地查看源表与目标表的映射关系信息。

6.3.1 高级配置

展开高级配置按钮,进行解决方案 DML、使用已有表、高级参数等相关配置,其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。

配置项

说明

DML 配置

解决方案执行过程中,支持同步 DML 事件类型,支持插入、更新、删除事件类型。

说明

  • 若取消勾选 DML 事件类型,则源端进行相应操作时,解决方案将不同步对应操作类型的数据;
  • 若在任务高级参数中配置了 DML 相关语句过滤,则以高级参数中的配置为准,此处勾选不生效。

使用已有表配置

当目标表已存在,即下方“表建立方式”为“使用已有表”时,若此时源表与目标表中已有字段列不一致时,可通过列匹配规则,根据实际场景进行列映射规则设置,目前支持自动映射、同名取交映射两种匹配规则配置:

  • 自动映射:默认映射规则,字段列不一致时,提示目标检查异常。
  • 同名取交映射:字段列不一致时,仅同名映射匹配到的字段进行数据同步,未匹配到的字段不做同步,任务正常执行。

说明

当解决方案中配置了上述数据转换配置时,使用已有表配置的列匹配规则默认仅支持选择同名取交映射,暂不支持选择其他匹配规则。

源表和目标刷新配置

整库离线方案配置的源表和目标表数量较多时,您可设置单次拉取表数量,来分批进行表映射配置,默认单次拉取数量为 100 张表,您可根据实际情况进行调整,填写范围 1~2000。

高级参数配置

您可为同步解决方案配置全局的高级参数,打开开关按钮后,可通过以下方式配置:

  • 单表编辑模式,需要设置参数 Key 和 value 值;
  • 脚本编辑模式,需要输入 json 格式的参数。

如单表编辑模式,您可通过设置参数:storage_dialect_type=MYSQL,来设定 ByteHouse CDW 表为 MySQL 属性表;solution.writer.common.ddl.bytehouse.enable.binlog=true,来设定自动创建的 ByteHouse CDW 表为 Binlog 属性表,具备 Binlog 读取能力。

6.3.2 库/表名映射配置

单击库/表名映射配置按钮,在弹窗中配置库表匹配策略,支持选择与来源库表同名和自定义方式匹配:

  • 与来源库表同名:来源库表选择完成后,解决方案默认将目标端的库表名称,与源端库表信息同名,若目标端不存在同名数据表时,将会自动创建。

    注意

    • 目前暂不支持自动创建同名数据库,您需先在目标端 ByteHouse CDW 数据库中创建好同名的数据库。
    • ByteHouse CDW 数据源接入方式为连接串模式,配置解决方案中, 写入 ByteHouse CDW 时,暂不支持自动建表操作。采用此接入方式,需手动在目标库中创建相应的数据表,或在数据源配置时选择接入方式为”火山引擎 ByteHouse 云数仓版“。
  • 自定义:您也可通过自定义匹配方式,设置源端与目标库表的匹配策略,配置方式详见“9 库表映射规则说明”。

映射规则配置完成后,单击弹窗右上角关闭按钮,即规则映射配置完成。

6.3.3 DDL 配置

MySQL2ByteHouse_CDW 解决方案通道,支持配置 DDL 策略,若您的实际业务场景中会遇到较多来源端新增表、新增列等 DDL 操作场景时,您可配置使用。
不同数据源中不同的 DDL 消息目前可能支持的处理策略不同,整体处理策略如下:

  • 自动处理: 即会在来源端捕获的 DDL 消息,下发给目标数据,由目标数据来自动响应处理,包括自动加表、自动加列、自动变更列类型等。不同目标数据对 DDL 消息处理策略可能不同,平台仅执行转发操作。
  • 忽略变更: 即会丢弃掉此 DDL 消息,不向目标数据源发送此消息,目标端数据源不做任何响应。
  • 日志告警: 即会丢弃掉此 DDL 消息,但会在同步日志中记录 DDL 变更消息详情。
  • 任务出错: 即一旦源端出现 DDL 变更,同步任务将显示出错状态并终止运行。

目前不同 DDL 消息处理策略情况如下:

DDL 消息

自动处理

忽略变更

日志告警

任务出错

新建表

删除表

重命名表

新增列

删除列

重命名列

修改列类型

清空表

注意

  • 若解决方案开启数据缓存模式的情况下,不支持配置解决方案 DDL 能力,即所有源端的 DDL 消息均只能做忽略变更处理。
  • 新建表 DLL 策略,必须满足以下所有条件:
    1. 在上方”数据源配置 > 表选择模式“中,必须使用正则模式;
    2. MySQL 中新增的表名,必须符合上方配置的正则表达式规则;
    3. 新增的 MySQL 表必须包含有主键字段信息。
  • 新增列变更消息自动处理策略目前存在以下限制:
    • 源端中主键列不支持自动加列;
    • 目标端自动增加的列,需允许存在 null 值;
    • 如配置列名映射规则,则不再支持自动加列操作。
  • 修改列类型变更消息自动处理策略目前存在以下限制:
    • 源端中主键列不支持自动修改列类型;
    • 如目标端列已为 string 类型,则不再跟随源端类型变更;
    • 列类型的存储数据范围不支持由大改小,例如目标端列类型已为 bigint 类型,源端即使再次变更为 int,目标端将依然保持为 bigint,否则可能引起字段溢出问题。
  • 如需对已创建的任务进行 DDL 策略修改,您可在解决方案列表界面,单击运维列中方案编辑 > DDL 策略配置流程,修改 DDL 消息规则。

DDL 消息处理策略说明详见解决方案 DDL 策略配置

6.3.4 任务名称配置

支持通过引用参数变量的方式来自定义配置解决方案中生成的离线任务名称,便于您后期可依据自定义的任务名称快速查找任务进行维护。配置操作详见 8.3.4 任务名称配置

6.3.5 刷新源表和目标表映射

库/表映射配置、DDL 等配置完成后,您可单击刷新源表和目标表映射按钮,自动加载源表和目标表信息,您可以在列表中进行以下操作:

说明

对于历史方案,操作方案编辑,如在原有方案中进行新增表、删除表操作时,单击刷新源表和目标表映射按钮,会弹窗表选择范围,您可按需选择刷新全量表映射仅刷新变化表映射按钮进行表映射刷新。
Image
在方案编辑过程中,若同时对库/表名映射、DDL 配置、DML 配置、使用已有表配置、高级参数配置、数据源等所有涉及表内容的修改时,系统将默认会刷新全量表映射,且不会弹出选择窗口。

操作项

说明

筛选库表

单击漏斗按钮,您可输入源端与目标端的库表信息,进行筛选搜索。

源表/目标表主键

默认设置为源表中设置的主键字段信息,您可下拉进行选择源表中其余字段作为目标表的主键字段。

排序策略

排序策略将影响实时增量任务,若无排序字段,可能会出现上游乱序导致下游数据源错误,建议增加排序策略。

  • 无排序:根据上游数据写入顺序,新数据覆盖旧数据;
  • 自适应排序:根据目标表属性自动推断排序策略,表/索引建立方式为使用已有表数据表不存在时,会选择自适应排序方式。

排序字段

目标端为 ByteHouse CDW 时,在源端已有的字段中,下拉选择排序字段信息,最多选择 5 个排序字段。

表建立方式

表建立方式分为使用已有表、自动建表数据表不存在几种方式:

  • 使用已有表:当映射配置检查,目标端存在与源端表同名的表名时,则会直接使用已有表,来执行方案。

    注意

    使用已有 ByteHouse CDW 表时,需保证以下表结构:

    • ByteHouse CDW 表,表配置时必须要设置唯一键字段;
      Image

    当写入 ByteHouse CDW 表的数据量较大时,建议根据 ByteHouse 建表配置最佳实践 操作进行手动建表。

  • 自动建表:当映射配置检查,目标端不存在与源端表同名的表名时,将会通过任务,以定义的目标表名,自动创建目标表。

    注意

    • 若要使自动创建 ByteHouse CDW 表后续具备 Binlog 读取能力,则需要在上方高级参数配置处,手动添加高级参数 solution.writer.common.ddl.bytehouse.enable.binlog=true,如此创建的表方可后续支持 Binlog 读取。
    • ByteHouse CDW 数据源接入方式为连接串模式,配置解决方案中, 写入 ByteHouse CDW 时,暂不支持自动建表操作。采用此接入方式,需手动在目标库中创建相应的数据表,或在数据源配置时选择接入方式为”火山引擎 ByteHouse 云数仓版“。
  • 数据表不存在:当目标端无法通过 DataSail 自动建表时,您需要进入目标端数据库中,手动创建数据表后,再继续配置解决方案。

分区字段

支持为目标表选择无分区、字段分区两种分区字段类型:

  • 无分区:
    目标表不创建分区;
  • 字段分区:
    即支持根据源表字段中的数据进行动态分区设置,支持选取或输入关键词搜索表中的字段作为分区,支持多选。
    ByteHouse CDW 目标数据源类型选择的分区字段类型为 DateTime、DateTime64、Date、Time 类型时,您可单击编辑按钮,进一步选择时间粒度,如 MONTH、DAY、HOUR 粒度。其中
    • Date 类型的支持选择 MONTH、DAY 粒度;
    • DateTime、DateTime64 类型的支持选择 MONTH、DAY、HOUR 粒度,默认选取首个选项,即 DAY;
    • Time 类型较特殊,只支持选择 HOUR 分区粒度。
      Image

注意

  • 在上方高级配置 > 高级参数配置中,添加 solution.writer.common.ddl.partition.keys=column{granularity=day}高级参数,即可实现为多个表的同一个字段,批量配置字段分区时间粒度,其中column可替换为表实际字段名,day可替换为实际时间粒度。
  • 分区字段数量最多支持 5 个。

全量同步

  • 按钮开启时,同步解决方案将创建全量离线任务和实时增量任务,进行历史全量数据和增量数据的同步。
  • 按钮关闭时,同步解决方案仅创建实时增量任务,仅同步后续增量变更的源端表数据。

清表策略

您可根据实际情况,选择是否开启清表策略,开启表示在数据写入目标表前,会清空原有目标表中的数据,通常是为了使任务重跑时支持幂等操作。

查看字段信息

可以查看来源表、目标表的字段名和其对应的字段类型等信息。在弹窗中,您也可对自动创建的目标表字段类型和字段描述信息,进行手动编辑调整。

配置

您可为同步解决方案配置多表映射高级参数,以 key-value 的形式输入。如果您需要对某个表进行特殊配置,如对表数据进行过滤,您可在此配置单表过滤条件,可添加以下高级参数:
solution.task.batch_snap_once.parameter.optional = { "job.reader.filter": "id>200"},过滤语句可根据实际情况进行调整。
Image

重置

单击操作列中的更多 > 重置按钮,可重置源表与目标表的映射关系。

批量操作

当目标表数量较多时,您可勾选多个表后,批量对目标表进行全量同步设置、清表策略设置操作。

6.4 提交方案

方案映射配置完成后,单击右下角提交方案按钮,进行方案的提交,在弹窗中,您可根据实际情况勾选方案是否立即执行,并单击确定按钮,完成实时数据同步解决方案的创建。

7 执行详情查看

方案创建完成后,进入到方案列表界面,便可查看方案的执行概况。

  1. 单击运维操作列的执行详情按钮,进入解决方案执行详情界面:

  2. 在执行详情界面,等待所有步骤执行完成,您可根据步骤完成情况,查看各个步骤的执行详情:

    1. 您可在“一次性全量批任务启动”步骤执行详情中,查看批式任务的运维与执行日志情况。批式任务运维操作详见离线任务运维

    2. 在“增量流任务启动”步骤详情中,查看增量流式任务的运维、执行日志和 Application Url 等任务详情。

    3. 单击更多 > Application Url 按钮,进入查看增量流式任务的执行详情,您可在该界面中看到实时同步成功数据量、失败数据量、数据量大小等详情。

8 数据验证

一次性全量批任务和增量流任务执行成功后,您可前往 ByteHouse云数仓版目的端数据库中,验证数据的实时接收情况。

  1. 前往 ByteHouse 控制台 ,打开SQL工作表,详见SQL工作表使用说明。

  2. 执行以下语句,查询 对应表数据进行验证

    use dts_test_do_not_delete;
    select * from mysql_2_bhcdw_cdc;
    

9 解决方案运维

9.1 监控报警配置

数据验证无误后,您可以对已创建的任务进行管理,如同步方案的编辑、重启、暂停、添加任务监控等操作。
操作详见实时任务监控指标及告警配置

9.2 修改实时整库同步任务

实时整库同步任务提交执行后,若遇到以下情况,您可以修改任务配置,并重新提交执行:

  • 源端添加表:源端 MySQL 添加表后,进入编辑解决方案,操作“刷新源表和目标表映射”按钮,并将任务提交执行。操作详见实时整库解决方案加表实践
  • 删除表:进入编辑解决方案,将数据来源中的源端表删除,并单击“刷新源表和目标表映射”按钮,将任务提交执行。
  • 修改表字段:进入编辑解决方案,单击“刷新源表和目标表映射”按钮,刷新字段映射关系,将任务提交执行即可。

9.3 重启实时整库同步任务

  • 提交执行
    Image
    • 已经运行中的解决方案,单击运维列中的提交执行,默认只重启增量任务;
    • 增量流任务位点重置步骤中,人工确认是否需要重置位点开关。重置时您可输入 Binlog 文件名、 Binlog 位点、gtids 等信息进行位点重置。默认是 Checkpoint 中保存的位点。
  • 强制重启
    运维列中的强制重启操作,会重新全量、增量任务进行同步
    • 如果“源表和目标表映射”中,只有部分表选择了“全量同步”操作,则增量任务的位点是 Checkpoint 中保存的位点;
    • 如果全部表选择“全量同步”,则会重新计算位点。

10 调优案例

同步全量历史数据时,如果业务环境中数据量比较大,您可参考以下调优参数来提高任务同步效率。

10.1 案例一:

案例需求: 7 千万条数据,100GB 大小 ,期望在 1小时内同步完成。
案例分析:数据条数不多,但单条数据较小,会比较占内存
离线集成参数

  • "job.common.is_use_batch_mode":"false"参数,调整为 pipline 模式, 数据量超过 20GB 时,必须要配置此参数;
  • "job.common.slots_per_tm":"1", 和 "job.common.flink_tm_slot_memory":"4096" 参数,设置单个 TaskManager 中,一个 slot 和 4G ,提高单个并发数据处理能力;
  • "job.writer.buffer_count":"20000" 参数,此参数值不易过大,会占用 TaskManager 内存 和 bh 计算组,建议在 5w 以下;
  • "job.reader.reader_fetch_size":"1000000", 和 "job.reader.shard_split_mode":"accurate" 参数,可以提高分片速率;
  • "job.reader.reader_parallelism_num":"8", 和 "job.writer.writer_parallelism_num":"8" 参数,设置任务读写并发;

更多参数说明详见5.3 资源组高级配置(任务高级参数配置)
案例效果 : 占用资源 9c36G ,同步效率 3GB/分钟
Image

10.2 案例二:

案例需求: 在有限集成资源组资源下进行同步,时间没有硬性要求。
案例分析: 集成资源组总共 4CU 资源,单条数据较小。
离线集成参数

  • job.common.is_use_batch_mode":"false" 参数,将其调整为 pipline 模式, 数据量超过 20GB时,一定要配置此参数;
  • JobManager 和 TaskManager 默认 1c4g ,slots_per_tm 默认为 2;
  • "job.reader.reader_fetch_size":"50000", 和 "job.writer.buffer_count":"50000"参数,设置读写条数 5w;
  • "job.reader.reader_parallelism_num":"4", 和 "job.writer.writer_parallelism_num":"4" 参数,设置读写并发 4;
  • "job.writer.bh_connection_properties":"{"max_partitions_per_insert_block":"10000"}" 参数,分区较多时,建议配置该参数, 调大分区限制。

更多参数说明详见5.3 资源组高级配置(任务高级参数配置)
案例效果 : 占用资源 3c12g ,同步效率 1GB/分钟左右
Image

11 常见问题

Q1:数据集成任务如何在任务中指定 ByteHouse 计算组信息?

在配置 ByteHouse CDW 数据源时,可指定一个 ByteHouse CDW 计算组信息。
Image
该计算组信息在数据源中绑定,在任务执行时,您可通过以下高级参数,来指定使用的计算组信息:
job.writer.virtual_warehouse=Your_ByteHouse_Virtual_Warehouse(如 vw-21xxxxxxxxxx7-dxx-xxt)

Q2:实时 + 离线任务资源不足时如何优化?

  • 问题案例:
    一个解决方案里包含 实时离线 任务,离线数据量大,任务执行时经常抢不到资源或运行缓慢,偶尔还会出现以下报错异常信息。

  • 关键字:
    Could not allocate the required slot within slot request timeout Please make sure that the cluster has enough resources.

  • 报错信息:

    2024-06-26 14:22:20,651 ERROR org.apache.flink.runtime.executiongraph.ExecutionGraph       flink-akka.actor.default-dispatcher-4                        [] - Source_JDBC -> InputAdapter(1/2) - execution #0 (fa9cc83da71d0264a124b6849212316e) switched from SCHEDULED to FAILED on not deployed org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Could not allocate the required slot within slot request timeout. Please make sure that the cluster has enough resources.
            at org.apache.flink.runtime.scheduler.DefaultScheduler.maybeWrapWithNoResourceAvailableException(DefaultScheduler.java:809)
            at org.apache.flink.runtime.scheduler.DefaultScheduler.lambda$assignResourceOrHandleError$19(DefaultScheduler.java:790)
            at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822)
            at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:797)
            at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
    
  • 解决方案:
    该报错现象是因为数据集成资源组可用资源不足,您可对集成资源组进行扩容操作。当业务高峰期过后,您便可对资源组进行缩容操作,提高资源组利用率。操作详见独享集成资源组管理
    Image

Q3:如何在实时整库同步解决方案中,使用数据转换能力

  • 问题案例:
    在 MySQL2ByteHouse CDW 实时整库同步解决方案中,想要给目标表中增加一个字段,其值取自源端表某个字段数据中截取的一段数据。
  • 解决方案:
    您可使用解决方案数据转换能力,在数据转换中,使用 SQL 语句对源端表数据进行处理,生成目标表数据。更多转换语句详见数据转换函数库
    如原始字符串:https://www.volcengine.com/docs/6260/1374089,处理示例如下:
    • SUBSTRING(path,8) 结果是: www.volcengine.com/docs/6260/1374089
    • SPLIT_INDEX(SUBSTRING(path,8),/',0)结果是: www.volcenginecom
    • REPLACE(SUBSTRING(path,8), SPLIT_INDEX(SUBSTRING(path,8)//'o),") 结果是:/docs/6260/1374089

Q4:实时整库同步异常 Memory limit (total) exceeded

  • 问题案例:
    MySQL2ByteHouse_CDW 实时整库同步执行时,出现内存超限异常信息。

  • 关键字:
    ByteHouseSQLException: errbook_Gateway_InsertToWorker_WaitFail_IE Memory limit (total) exceeded

  • 报错信息:

    2024-10-05 20:03:13,663 ERROR com.bytedance.bitsail.bytehouse.sink.BytehouseSinkWriter bytehouse-async-flusher-ai_match_product_nft_second_price-0 [] - Subtask 0 commit data to bytehouse failed, retry count 5.
    com.bytedance.bitsail.common.BitSailException: Code:[Common-05], Describe:[Internal error found in BitSail. This is usually a bug.] - com.bytedance.bytehouse.exception.ByteHouseSQLException: errbook_Gateway_InsertToWorker_WaitFail_IE Memory limit (total) exceeded: would use 14.40 GiB (attempt to allocate chunk of 4220596 bytes), maximum: 14.40 GiB SQLSTATE: 53000. Stack trace:
    
  • 解决方案:
    多为 ByteHouse CDW 计算组(VW)内存不足。请对 ByteHouse CDW 计算组执行扩容,提升可用内存后重试。详见计算组操作

Q5:任务报错:no virtual warehouse was selected

  • 问题案例:
    MySQL2ByteHouse CDW 实时整库任务,ByteHouse CDW 目标端在执行 insert 的时候,报错异常:no virtual warehouse was selected
  • 关键字:
    no virtual warehouse was selected
  • 报错信息:
    Image
  • 解决方案:
    此报错异常是提示在 ByteHouse CDW 控制台中,没有设置默认的计算组(VM)信息。
    您需前往 ByteHouse CDW 控制台设置默认的 VM 信息。
    Image

Q6:DTSFetchBinlogOffset error — Access denied

  • 问题案例:
    解决方案提交执行时,执行检查报错 解决方案提交执行报错
  • 关键字:
    DTSFetchBinlogOffset error
  • 报错信息:
    Image
  • 根因分析:
  • 解决方案:
    MySQL 数据源账号权限不足,异常栈信息:Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation。您需联系 DBA 同学给账号授权或者使用有权限的账号。MySQL 权限控制详见4.1 数据源注册

Q7:MySQL 创建连接异常 Could not create connection to database server Connection timed out

  • 问题案例
    MySQL2ByteHouse CDW 整库实时任务,创建 MySQL 连接异常。

  • 关键字:
    Could not create connection to database serve Connection timed out

  • 报错信息:

    2024-07-09 11:50:52,769 ERROR com.bytedance.bitsail.core.Engine                            flink-akka.actor.default-dispatcher-3                        [] - 
    The cause of the job failure maybe due to:
    java.util.concurrent.ExecutionException: com.bytedance.bitsail.common.BitSailException: Code:[JDBCPlugin-04], Description:[Error occurred while getting database connection.]. - Shard info: (shard num: 0        10.xxx.xx.xx:3306        jdbc:mysql://address=(protocol=tcp)(host=10.xxx.xx.xx)(port=3306)/ordercenteruat?autoReconnect=true). Error: Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.) - org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)
            at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
            at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at com.bytedance.dts.batch.jdbc.split.DbShardWithConn.connect(DbShardWithConn.java:229)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    
  • 解决方案:
    此异常多为 MySQL 与 DataSail 集成资源组 网络不通白名单未放行。您需核查数据库 入口/出口网络策略白名单配置,确保 DataSail 与数据库之间 网络直通

Q8:启动报初始化位点错误

  • 问题案例:
    实时整库同步任务,在启动时报初始化位点错误,提交失败 check job start permission failed

  • 关键字:
    初始化位点错误,check job start permission failed,show master status 异常;

  • 报错信息:

    _level: ERROR  __logid: -  _podname: dp-70xxxxxx7a-5cxxxxx4-zsfwb  _msg: 2024-07-31 21:11:15,869 [ERROR] [ForkJoinPool-1-worker-35] c.b.d.d.c.s.i.JobScheduleServiceImpl.scheduleJobByStatus:379 - Failed to submit job, job id: 97xxxx34, resource group id: 1xxx8
    com.bytedance.dataplatform.dts.exception.DTSException: Service internal error, error info: Failed to start job to project=v1xvfa5htyh7, remote response: OpenApiResp(ResponseMetaData=OpenApiResp.ResponseMetaData(RequestId=202407xxxxxxxxxxx633, Action=StartApplicationInstance, Version=2021-06-01, Service=flink, Region=cn-beijing, Error=OpenApiResp.Error(Code=default system error, Message=check job start permission failed.)), Result=null)
            at com.bytedance.dataplatform.dts.commander.client.vci.VciRemoteClient.submit(VciRemoteClient.java:120)
            at com.bytedance.dataplatform.dts.commander.client.vci.VciRemoteClient.submit(VciRemoteClient.java:67)
            at com.bytedance.dataplatform.dts.commander.client.vci.VciRemoteClient$$FastClassBySpringCGLIB$$c96c01ba.invoke(<generated>)
    
  • 解决方案:
    此异常根因为 MySQL 用户没有 show master status 权限。
    数据同步解决方案使用该 MySQL 数据源,配置实时方案读取 Binlog 时,需要先执行以下授权 SQL 命令给配置的账号:GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'user' IDENTIFIED BY 'password';详见4.1 数据源注册

Q9:mysql2xx You are not using binary logging

  • 问题案例:
    MySQL2xx 实时整库同步方案中,执行报错 You are not using binary logging。

  • 关键字:
    mysql2xx You are not using binary logging

  • 报错信息:

    2024-05-30T14:06:38+08:00        "Source_mysql_cdc -> split_stream -> (Map, Map_1, Map_2, Map_3) (1/1)- execution # 2 [] - Source_mysql_cdc -> split_stream -> (Map, Map_1, Map_2, Map_3) (1/1)- execution # 2 (1cebb1bb660405db9a1f5ddd0549c6f4) switched from RUNNING to FAILED io.debezium.DebeziumException: Unexpected error while connecting to MySQL and looking for binary logs:          
    at io.debezium.connector.mysql.MySqlConnection.availableBinlogFiles(MySqlConnection.java:416)         
    at com.bytedance.bitsail.connector.cdc.mysql.source.reader.MySqlFetchTaskContext.isBinlogAvailable(MySqlFetchTaskContext.java:251)         
    at org.apache.flink.streaming.runtime.tasks.StreamTask.executeInvoke(StreamTask.java:876)         at org.apache.flink.streaming.runtime.tasks.StreamTask.runWithCleanUpOnFail(StreamTask.java:887)         
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:860)         at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:1036)         
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:807)         
    at java.lang.Thread.run(Thread.java:748) Caused by: java.sql.SQLException: You are not using binary logging         
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)         
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)         at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1206)         at io.debezium.jdbc.JdbcConnection.query(JdbcConnection.java:560)         
    at io.debezium.jdbc.JdbcConnection.query(JdbcConnection.java:503)         at io.debezium.connector.mysql.MySqlConnection.availableBinlogFiles(MySqlConnection.java:408)         ... 21 more ."
    
  • 解决方案:
    此异常是因为源端 MySQL 中 Binlog 文件不存在导致。您可进行解决方案的强制重启重置位点操作。详见9 解决方案运维.

最近更新时间:2026.03.16 11:44:39
这个页面对您有帮助吗?
有用
有用
无用
无用