Dinky项目实战:使用MySQL CDC整库同步至Doris
概述
本文将详细介绍如何在Dinky项目中实现MySQL数据库到Doris的整库同步。CDC(Change Data Capture)技术能够实时捕获源数据库的变更,而Doris作为高性能的MPP分析型数据库,非常适合作为数据仓库的存储层。通过Dinky提供的CDCSOURCE功能,我们可以轻松实现这一数据同步过程。
环境准备
在开始同步前,需要确保以下组件已正确配置:
-
依赖JAR包准备
- Flink连接Doris所需的Connector JAR包需放置在Flink/lib和dinky/extends目录下
- MySQL CDC连接器JAR包同样需要放置在上述目录
- 如果使用Application/Per-Job提交模式,还需将JAR包上传至HDFS
-
服务重启
- 如果在服务启动后才添加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'
);
关键参数说明:
-
MySQL CDC配置:
scan.startup.mode
:建议设置为initial,表示首次启动时读取全量数据table-name
:支持正则表达式匹配多表
-
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演化特性说明:
- 自动检测源表结构变更并同步到目标表
- 支持新增列的自动添加
- 支持删除列的自动处理
- 库表名需要与源库保持一致
最佳实践建议
-
性能调优
- 根据数据量调整
parallelism
参数 - 合理设置
checkpoint
间隔,平衡可靠性和性能 - 调整
sink.doris.batch.size
和sink.sink.batch.interval
优化写入性能
- 根据数据量调整
-
监控与维护
- 定期检查同步延迟
- 监控Doris集群负载情况
- 注意
sink.label-prefix
的唯一性要求
-
异常处理
- 设置合理的
sink.sink.max-retries
重试次数 - 对于重要数据,建议增加异常数据告警机制
- 设置合理的
通过Dinky提供的CDCSOURCE功能,我们可以高效地实现MySQL到Doris的实时数据同步,为数据分析提供实时、准确的数据支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考