Dinky整库同步mysql到doris问题汇总

本文讲述了在使用Dinky-rc4与Flink1.17.2和Doris1.2.7集成时遇到的五个问题:1)dorissink参数不支持;2)NoClassDefFoundError关于HdfsConfiguration;3)connector参数不支持;4)同步失败与字段类型映射;5)Java类找不到。作者强调了通过日志调试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前环境:
dinky-rc4
flink-1.17.2(单节点)
mysql-connector-java-5.1.49.tar.gz
flink-doris-connector-1.17-1.5.1.jar
flink-sql-connector-mysql-cdc-3.0.0.jar(之前是2.3不成功,替换成最新的3.0,不方便科学上网的,我已优快云上传资源,可根据对应版本自行下载)
doris-1.2.7
问题1
现象:同步任务报doris sink相关参数不支持,修改整库同步SQL后没有仍然报之前的错误,感觉跟没有修改成功一样。
解决方法:找到对应的catalog表,删除catalog,重启启动同步任务。0.7.5版本存在这个问题,rc4也存在(不清楚是不是我姿势不对导致)
问题2、
现象:同步任务报java.lang.NoClassDefFoundError:org/apache/hadoop/hdfs/HdfsConfiguration。
解决方法:如果不是Hadoop环境,此报错信息可以忽略,不影响整体任务。
问题3、
现象:doris-connector报Unsupported options:
解决方法:报什么就先注释掉,再看报错信息中提示内容,如果正常通过,可以在doris官网看connector具体版本对应的参数
问题4、
现象:同步任务同步到一半失败了,doris目标端已写入部分数据
解决方法:这个就要考虑字段类型映射问题报错导致,可以通过参数设置自动类型转换,具体查看官网相对参数。
问题5、
现象:报java.lang.NoClassDefFoundError
解决方法:此报错大部分情况下都是缺包,注意Dinky胖包的引用,是否放置在对应的目录下。
写在最后:
整个调试过程都要紧盯报错日志(有什么报错就解决什么问题),有时候flink没有报错,Dinky有报错,有时Dinky没报错,flink有报错。下面说三个看日志的地方:Dinky-配置中心-系统日志,flink Task-Managers logs\flink Job-Manager

### 使用 DinkyFlinkCDC 实现 MySQL 同步的配置教程 #### 1. 配置概述 为了实现 MySQL 数据的全量同步至目标存储(如 Doris 或 StarRocks),可以通过 Dinky 提供的功能来构建基于 FlinkCDC 的 Pipeline。此过程涉及源端数据连接、数据捕获以及目标端的数据写入等多个环节。 以下是具体的操作指南: --- #### 2. 源端 MySQL 配置 在创建 Pipeline 前,需确保已准备好 MySQL 数据的相关信息,包括但不限于主机地址、端口、用户名和密码等基本信息。这些参数将在后续的 Source 配置中被引用[^1]。 ```sql -- 示例 MySQL 数据结构 CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255), price DECIMAL(10, 2) ); CREATE TABLE orders ( order_id INT PRIMARY KEY, product_id INT, quantity INT ); ``` 上述 SQL 创建了一个 `test` 及其下的两张表 `products` 和 `orders`,作为演示对象[^3]。 --- #### 3. 构建 Source 环节 Source 节点负责从 MySQL 获取增量或全量数据流。以下是一个典型的 JSON 格式的 Source 参数模板: ```json { "plugin_name": "mysql-cdc", "hostname": "#{host}", "port": "#{port}", "username": "#{username}", "password": "#{password}", "database-name": ["#{schemaName}"], "table-name": ["#{tableName}"] } ``` 其中: - `#{host}` 替换为 MySQL 主机地址; - `#{port}` 替换为 MySQL 端口号,默认为 3306; - `#{username}` 和 `#{password}` 是访问权限凭证; - `#{schemaName}` 和 `#{tableName}` 将分别由实际的名和表名单独填充。 --- #### 4. 定义 Sink 环节 Sink 节点用于将来自 Source 的数据写入目标存储系统。假设目标是 Apache Doris,则可参考如下配置: ```json { "plugin_name": "doris", "fe-nodes": "localhost:8030", "table-identifier": "#{sinkSchema}.#{sinkTable}", "user": "#{sinkUser}", "password": "#{sinkPassword}" } ``` 在此配置中: - `#{sinkSchema}` 对应目标 Schema 名称(例如 `ods`); - `#{sinkTable}` 自动映射为目标表名称前缀加原表名的小写形式(如 `test__products`)。这一步遵循了同步的标准命名约定。 如果目标改为 StarRocks,则其配置逻辑相似,仅需调插件名称及相关属性值即可[^2]。 --- #### 5. 测试与验证 完成以上两部分后,在 Dinky 平台上启动对应的 Job,并观察运行状态日志以确认无误。一旦发现异常情况,可通过调试工具定位问题所在并及时修正。 此外,还需注意定期维护上下游系统的元数据一致性,防止因版本升级或其他变更引发兼容性隐患。 --- #### 6. 注意事项 - **字段匹配**:确保 MySQL 表结构能够顺利映射到下游目标表上,必要时手动干预字段类型转换。 - **性能调优**:针对大规模数据迁移场景,合理设置并发度及其他资源分配策略。 - **错误处理机制**:提前规划好失败重试次数上限及告警通知方式,保障作业稳定性。 --- ### 示例代码片段 下面展示了一段完的 YAML 文件定义样例,适用于描述个流程链路: ```yaml name: mysql_to_doris_pipeline source: plugin_name: mysql-cdc hostname: localhost port: 3306 username: root password: secret database-name: [test] table-name: [] transform: - type: map fields: - from: 'id' to: 'product_id_mapped' sink: plugin_name: doris fe-nodes: localhost:8030 table-identifier: ods.test__products user: admin password: passw0rd ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值