Dinky项目实战:使用MySQL CDC整库同步至Doris

Dinky项目实战:使用MySQL CDC整库同步至Doris

dinky Dinky is an out-of-the-box, one-stop, real-time computing platform dedicated to the construction and practice of Unified Streaming & Batch and Unified Data Lake & Data Warehouse. Based on Apache Flink, Dinky provides the ability to connect many big data frameworks including OLAP and Data Lake. dinky 项目地址: https://gitcode.com/gh_mirrors/di/dinky

概述

本文将详细介绍如何在Dinky项目中实现MySQL数据库到Doris的整库同步。CDC(Change Data Capture)技术能够实时捕获源数据库的变更,而Doris作为高性能的MPP分析型数据库,非常适合作为数据仓库的存储层。通过Dinky提供的CDCSOURCE功能,我们可以轻松实现这一数据同步过程。

环境准备

在开始同步前,需要确保以下组件已正确配置:

  1. 依赖JAR包准备

    • Flink连接Doris所需的Connector JAR包需放置在Flink/lib和dinky/extends目录下
    • MySQL CDC连接器JAR包同样需要放置在上述目录
    • 如果使用Application/Per-Job提交模式,还需将JAR包上传至HDFS
  2. 服务重启

    • 如果在服务启动后才添加JAR包,需要重启Flink和Dinky服务
    • 或者使用Dinky提供的ADD CUSTOMJAR功能动态加载

同步方案详解

基础同步配置

以下是一个将MySQL数据库同步到Doris的标准配置示例,适用于Doris 1.2.0版本:

EXECUTE CDCSOURCE demo_doris WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '127.0.0.1',
  'port' = '3306',
  'username' = 'root',
  'password' = '123456',
  'checkpoint' = '10000',
  'scan.startup.mode' = 'initial',
  'parallelism' = '1',
  'table-name' = 'test\.student,test\.score',
  'sink.connector' = 'doris',
  'sink.fenodes' = '127.0.0.1:8030',
  'sink.username' = 'root',
  'sink.password' = '123456',
  'sink.doris.batch.size' = '1000',
  'sink.sink.max-retries' = '1',
  'sink.sink.batch.interval' = '60000',
  'sink.sink.db' = 'test',
  'sink.sink.properties.format' ='json',
  'sink.sink.properties.read_json_by_line' ='true',
  'sink.table.identifier' = '#{schemaName}.#{tableName}',
  'sink.sink.label-prefix' = '#{schemaName}_#{tableName}_1'
);

关键参数说明:

  1. MySQL CDC配置:

    • scan.startup.mode:建议设置为initial,表示首次启动时读取全量数据
    • table-name:支持正则表达式匹配多表
  2. Doris Sink配置:

    • sink.label-prefix:每次提交作业需要修改后缀数字,避免冲突
    • sink.doris.batch.size:控制批量写入大小,影响写入性能
    • sink.sink.batch.interval:批量写入间隔时间(毫秒)

支持Schema演化的高级配置

当源表结构可能发生变化(如新增列、删除列)时,可以使用支持Schema演化的配置:

EXECUTE CDCSOURCE demo_doris_schema_evolution WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '127.0.0.1',
  'port' = '3306',
  'username' = 'root',
  'password' = '123456',
  'checkpoint' = '10000',
  'scan.startup.mode' = 'initial',
  'parallelism' = '1',
  'table-name' = 'test\.student,test\.score',
  'sink.connector' = 'datastream-doris-schema-evolution',
  'sink.fenodes' = '127.0.0.1:8030',
  'sink.username' = 'root',
  'sink.password' = '123456',
  'sink.doris.batch.size' = '1000',
  'sink.sink.max-retries' = '1',
  'sink.sink.batch.interval' = '60000',
  'sink.sink.db' = 'test',
  'sink.table.identifier' = '#{schemaName}.#{tableName}'
);

Schema演化特性说明:

  1. 自动检测源表结构变更并同步到目标表
  2. 支持新增列的自动添加
  3. 支持删除列的自动处理
  4. 库表名需要与源库保持一致

最佳实践建议

  1. 性能调优

    • 根据数据量调整parallelism参数
    • 合理设置checkpoint间隔,平衡可靠性和性能
    • 调整sink.doris.batch.sizesink.sink.batch.interval优化写入性能
  2. 监控与维护

    • 定期检查同步延迟
    • 监控Doris集群负载情况
    • 注意sink.label-prefix的唯一性要求
  3. 异常处理

    • 设置合理的sink.sink.max-retries重试次数
    • 对于重要数据,建议增加异常数据告警机制

通过Dinky提供的CDCSOURCE功能,我们可以高效地实现MySQL到Doris的实时数据同步,为数据分析提供实时、准确的数据支持。

dinky Dinky is an out-of-the-box, one-stop, real-time computing platform dedicated to the construction and practice of Unified Streaming & Batch and Unified Data Lake & Data Warehouse. Based on Apache Flink, Dinky provides the ability to connect many big data frameworks including OLAP and Data Lake. dinky 项目地址: https://gitcode.com/gh_mirrors/di/dinky

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童兴富Stuart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值