Dinky 字段模式演变 PIPELINE 同步MySQL到Doris

embedded/2024/10/18 23:46:11/

背景 用Dinky数据平台 FlinkCDC收集Mysql BinLog 至 Doris 搭建实时数仓

问题 用Dinky CDCSOURCE 字段模式演变 整库同步Mysql到Doris 字段新增删除不生效

组件信息

Flink 1.17
FlinkCDC 3.1
dinky 1.1
Doris 2.1.6
Mysql 8.0

Dinky MySQLCDC 整库到 Doris需要的依赖

Flink/lib 和 dinky/extends 目录下放置
Doris 的 Flink connector jar和 MySQL CDC 的 Flink connector jar
有前三个依赖就可以完成dinky到doris的整库同步 但是字段新增删除不会生效 下面三个依赖用在flinkcdc pipeline方式的同步 下面也会截图Flink/lib 和 dinky/extends 完整的所有依赖flink-sql-connector-mysql-cdc-3.1.0.jar
flink-doris-connector-1.17-1.6.0.jar
mysql-connector-java-8.0.27.jar
flink-cdc-pipeline-connector-doris-3.1.0.jar
flink-cdc-pipeline-connector-mysql-3.1.0.jar
flink-cdc-dist-3.1.0.jar 这个包需要自己重新编译下 参考问题四

在这里插入图片描述

在这里插入图片描述

FlinkCDC PIPELINE 样例

这个是基础的单表 整库修改tables 参考flinkcdc3.0+ 官网 还有更多Route和transform功能大家都可以去看下
Route模块提供了表名映射的能力。通过为每一个源表中的数据设置其写入的目标表,通过一对一以及多对一的映射配置,我们能够实现整库同步和简单的分库分表同步功能
简单来说 就是整库同步的时候可以自定义库名 因为Dlink的CDCSOURCE做整库的同步的时候 库表名需要与源库相同 这快感觉相当于做了个补充 挺好的

transform 就是数据转换 应该是可以在Sink之前 对数据做一些基础的转换处理
哈哈哈哈哈 理解的比较浅显 没有去试过这个功能 有不对的地方 请大家多多指教 下面会列举一些过程中遇到的问题 也请教了dinky官方人员 感谢dinky官网的帮助

EXECUTE PIPELINE WITHYAML (
source:type: mysqlhostname: 152.136.51.49port: 3306username: rootpassword: 'xx-12345'tables: test.teachersserver-id: 5400-5404sink:type: dorisfenodes: 152.136.51.49:8030username: rootpassword: '123456'table.create.properties.light_schema_change: truetable.create.properties.replication_num: 1
pipeline:name: Sync MySQL Database to Dorisparallelism: 2
)

flinktableapiValidationException_The_MySQL_server_has_a_timezone_offset_0_seconds_ahead_of_UTC_which_does_not_match_the_configured_timezone_AsiaShanghai_Specify_the_right_servertimezone_to_avoid_inconsistencies_for_timerelated_fields_62">问题一 Caused by: org.apache.flink.table.api.ValidationException: The MySQL server has a timezone offset (0 seconds ahead of UTC) which does not match the configured timezone Asia/Shanghai. Specify the right server-time-zone to avoid inconsistencies for time-related fields.

其实就是Mysql时区的问题 在 my.cnf中添加default-time-zone=‘+08:00’ 然后重启Mysql就可以了
不要直接 SET GLOBAl time_zone = ‘Asia/Shanghai’; 重启之后不会生效
查看下 时区是东八区就可以了

     SHOW GLOBAL VARIABLES LIKE 'time_zone';

在这里插入图片描述

问题二 ERROR org.dinky.trans.ddl.CreateCDCSourceOperation 197 execute - connection disabled org.dinky.data.exception.BusException: connection disabled

这个官方给的回答是 Dinky CDCSOURCE的接口实现较老,在新版本 Doris 上支持可能存在问题 建议使用FlinkCDC的pipeline或者doris连接器内的整库同步脚本 所以后续我走上了FlinkCDC的pipeline的道路

flinkcdcruntimetypeutilsEventTypeInfoEventTypeInfo_76">问题三 Caused by: java.lang.ClassNotFoundException: org.apache.flink.cdc.runtime.typeutils.EventTypeInfo.EventTypeInfo

EventTypeInfo这个类是在flink-cdc-dist-3.1.0.jar包里面 我将这个包解压缩时候 是可以看到EventTypeInfo的 但是就感觉很奇怪 根本上的原因就是 flink\lib下面也需要添加pipeline的依赖 当时我只在dlink下面添加了 因为他任务底层实际上走的还是flink 所以我这边猜测dinky可能不需要这个依赖
flink-cdc-pipeline-connector-doris-3.1.0.jar
flink-cdc-pipeline-connector-mysql-3.1.0.ja

flinksinkbatchDorisBatchSink_local_class_incompatible_stream_classdesc_serialVersionUID__1727597565303701005_local_class_serialVersionUID__6424802353855033470_80">问题四 Caused by: java.io.InvalidClassException: org.apache.doris.flink.sink.batch.DorisBatchSink; local class incompatible: stream classdesc serialVersionUID = -1727597565303701005, local class serialVersionUID = -6424802353855033470

原因 flin Doris 连接器版本高了 我原先使用的时flink-doris-connector-1.17-24.0.0.jar的版本 将这个降到 flink-doris-connector-1.17-1.6.0.jar 就可以了

flinkcalciteshadedcomgooglecommoncollectImmutableList_83">问题四 java.lang.NoSuchMethodError: org.apache.calcite.tools.FrameworkConfig.getTraitDefs()Lorg/apache/flink/calcite/shaded/com/google/common/collect/ImmutableList

这个主要是参考这个博主的 也是我看到dinky 使用flinkcdc pipeline的方式只有一篇文章 才想起来还是记录下 避免后面还有人遇到这种问题
这个看这个博主说是CDC依赖冲突的问题 需要将flink-cdc-dist-3.1.0.jar里面删除一部分依赖 然后重新打包下
博主文章链接

# 解压 flink-cdc-3.1.0-bin.tar.gz
tar -zxvf flink-cdc-3.1.0-bin.tar.gz       
cd flink-cdc-3.1.0/lib/
# 解压jar文件·
jar -xvf flink-cdc-dist-3.1.0.jar
# 删除冲突包
rm -rf org/apache/calcite
# 重新打包
jar -cvf  flink-cdc-dist-3.1.0-new.jar 

自此就大功告成了 Dinky使用FlinkCDC pipeline的方式实现 Mysql到Doris的整库同步 并且可以捕获 表结构变更自动步(Schema Evolution)
在这里插入图片描述


http://www.ppmy.cn/embedded/128587.html

相关文章

开发一个微信小程序要多少钱?

在当今数字化时代,微信小程序成为众多企业和个人拓展业务、提供服务的热门选择。那么,开发一个微信小程序究竟需要多少钱呢? 开发成本主要取决于多个因素。首先是功能需求的复杂程度。如果只是一个简单的信息展示小程序,功能仅限…

【C++标准模版库】unordered_map和unordered_set的介绍及使用

unordered_map和unordered_set 一.unordered_set1.unordered_set类的介绍2.unordered_set和set的使用差异 二.unordered_map1.unordered_map和map的使用差异 三.unordered_multimap/unordered_multiset四.unordered_map/unordered_set的哈希相关接口 一.unordered_set 1.unord…

Git 可视化的实现:提升版本控制体验的利器

Git 是目前最流行的分布式版本控制系统,广泛应用于软件开发和项目管理中。然而,对于许多人来说,Git 命令行操作可能有些复杂且难以直观理解,特别是当涉及到复杂的分支和合并操作时。为了更好地帮助开发者掌握 Git 的操作过程&…

electron-vite_5打包后跳转失效?请用hash

关于打包后跳转失效, 请检查你的vue和react路由模式是不是hash模式; 注意必须使用hash模式,否则打包后路由跳转失效 React 版本 // "react-router-dom": "^6.11.2", import { HashRouter } from react-router-dom ReactDOM.createR…

树型名称前面插入图片

需求&#xff1a; 搜索树、树型要显示连线&#xff0c;还有名称前带图片 ui组件&#xff1a;https://devui.design/components/zh-cn/overview 直接上代码 [checkable] false 表示取消复选框 <div class"p-sm"><div class"row"><d-sea…

【vue】前置知识学习

代码获取 知识小结 1. 常量和变量 let 定义变量const 定义常量 2. 模板字符串 普通字符串是使用 “” 和 ‘’ 定义的 模板字符串是使用 定义的 模板字符串的好处 可以换行可以插入变量可以插入表达式 3. 对象 取值 .点取值 []方括号取值 // 对象定义 const obj {…

leetcode——135.分发糖果

135.分发糖果 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c;计算并…

基于SpringBoot的高校实习信息发布网站【附源码】

​基于SpringBoot的高校实习信息发布网站&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2 系统模块设计 4.3 数据库设计 4.3.1 数据库设计 4.3.2 数据库E-R 图 4.3.3 数据库表设计 5 系统实现 5.1 管理员功能模块的实…