当前位置: 首页 > news >正文

如何解决Flink CDC同步时间类型字段8小时时间差的问题,以MySQL为例

在使用Flink CDC进行数据同步时,默认情况下经常会遇到时间类型的字段与实际值相差8个小时的问题。本文以MySQL为例提供解决方案,其他数据源也可以参考这类实现。

原文链接:
https://mp.weixin.qq.com/s/_f41ES8UquM-kj3Ie8JU_g

1. 设置server时区

比如MySQL服务的时区为UTC时间,可以参考以下code设置时区。

MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
.hostname(${hostName})
.port(${port})
.databaseList(${dbList})
.tableList(${tableList})
.username(${userName})
.password(${dbPwd}) 
.scanNewlyAddedTableEnabled(${true})
.serverTimeZone("UTC")
.serverId(${serverID})
.startupOptions(${startupOptions})
.includeSchemaChanges(${includeSchemaChanges})
.debeziumProperties(${debeziumProperties})
.deserializer(new JsonDebeziumDeserializationSchema(false, decimalConfigs)).build();

2. 指定Debezium Time Converter

Flink CDC/Debezium官方有一个Time Converter自定义实现
MysqlDebeziumTimeConverter,可以在配置Debezium properties时进行指定来解决时间字段时间差的问题。
参考如下code进行配置:

String dateFormat = "yyyy-MM-dd";
String timeFormat = "HH:mm:ss";
String datetimeFormat = "yyyy-MM-dd HH:mm:ss";
String timestampFormat = "yyyy-MM-dd HH:mm:ss";
Properties debeziumProperties = new Properties();
debeziumProperties.setProperty(converters,"mysqlTimeConverters");
debeziumProperties.setProperty("mysqlTimeConverters.type","io.debezium.connector.mysql.converters.MysqlDebeziumTimeConverter");
debeziumProperties.setProperty("mysqlTimeConverters.format.timezone",timezone);
debeziumProperties.setProperty("mysqlTimeConverters.format.date",dateFormat);
debeziumProperties.setProperty("mysqlTimeConverters.format.time",timeFormat);
debeziumProperties.setProperty("mysqlTimeConverters.format.datetime",datetimeFormat);
debeziumProperties.setProperty("mysqlTimeConverters.format.timestamp",timestampFormat);

io.debezium.connector.mysql.converters.MysqlDebeziumTimeConverter源码实现片段。
在这里插入图片描述
在这里插入图片描述

如果我们需要自定义一个Converter,可以通过继承CustomConverter实现对应的方法即可,然后通过参考MysqlDebeziumTimeConverter的实现可以解决很多数据源比如SQL Server,PG等时间字段数据出现时间差的问题。

原文链接:
https://mp.weixin.qq.com/s/_f41ES8UquM-kj3Ie8JU_g

http://www.lryc.cn/news/593087.html

相关文章:

  • 我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)
  • lazyvim配置
  • 实验-华为综合
  • fclose 函数的概念和使用案例
  • MySQL详解二
  • HTML零基础快速入门教程(详细篇)
  • 【取消分仓-分布式锁】
  • LVS的简介以及架构
  • 【Unity编辑器开发GUI.Window】
  • Vite的优缺点(精简版)
  • Java-77 深入浅出 RPC Dubbo 负载均衡全解析:策略、配置与自定义实现实战
  • Word快速文本对齐程序开发经验:从需求分析到实现部署
  • 《Electron应用性能深耕:资源加载与内存治理的进阶路径》
  • Flutter基础(前端教程①④-data.map和assignAll和fromJson和toList)
  • 【SpringBoot】标准HTTP方法列表
  • 记录我coding印象比较深刻的BUG
  • Flutter基础(前端教程①⑤-API请求转化为模型列成列表展示实战)
  • Flink实时流量统计:基于窗口函数与Redis Sink的每小时PV监控系统(学习记录)
  • 面试150 课程表
  • 基于Python的口腔正畸健康教育聊天机器人开发与评估研究
  • 大语言模型置信度增强实战指南
  • Android Crash监控
  • 嵌入式硬件中电感的基本原理与实现详解
  • 神经网络:从模式组合到多层神经网络的进化
  • 爬虫逆向之JS混淆案例(全国招标公告公示搜索引擎 type__1017逆向)
  • 电商商品综合排序:从需求分析到实时计算的全方位指南
  • 【RK3576】【Android14】Android平台构建
  • Kotlin main函数
  • TCP 和 UDP 在创建套接字(Socket)时的区别
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭