如何解决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

相关推荐
计算机编程小央姐4 小时前
【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
大数据·hadoop·数据挖掘·数据分析·spark·课程设计
鲲志说5 小时前
数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
大数据·数据库·apache·时序数据库·iotdb
没有bug.的程序员5 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
nju_spy7 小时前
南京大学 - 复杂结构数据挖掘(一)
大数据·人工智能·机器学习·数据挖掘·数据清洗·南京大学·相似性分析
哈哈很哈哈8 小时前
Flink SlotSharingGroup 机制详解
java·大数据·flink
豆豆豆大王8 小时前
头歌Kingbase ES内连接、外连接查询
大数据·数据库·elasticsearch
在未来等你9 小时前
Elasticsearch面试精讲 Day 20:集群监控与性能评估
大数据·分布式·elasticsearch·搜索引擎·面试
是店小二呀11 小时前
整合亮数据Bright Data与Dify构建自动化分析系统
大数据·自动化·dify·mcp·bright data
阿里云大数据AI技术12 小时前
云栖2025 | 阿里云自研大数据平台ODPS 重磅升级:全面支持AI计算和服务
大数据·人工智能
人间凡尔赛13 小时前
elasticsearch安装插件
大数据·elasticsearch·搜索引擎