前言
最近在使用 FlinkCDC 做 MySQL 到 ElasticSearch 的数据同步,在数据同步的过程中遇到了一些关于日期类型的问题,在这里整理总结一下。
整个项目的数据架构如下:

MySQL的数据类型
以 MySQL 5.7 版本为例,MySQL 的时间类数据类型包括:DATE, YEAR, TIME, DATETIME, TIMESTAMP 5种。
-
date- 定义:只表示日期
- 存储格式:
YYYY-MM-DD - 取值范围:
1000-01-01to9999-12-31
-
datetime[(fsp)]- 定义:表示日期和时间
- 存储格式:
YYYY-MM-DD hh:mm:ss[.fraction] - 存储范围:
1000-01-01 00:00:00.000000到9999-12-31 23:59:59.999999 - 使用可选的fsp来表示秒的精度,fsp取值为0-6,默认为 0.
- 存储空间:使用 8 字节来存储,
- 时区:不支持时区
-
timestamp[(fsp)]- 定义:表示日期和时间,存储从 epoch (
1970-01-01 00:00:00 UTC)开始的经过的秒数。 - 存储范围:
1970-01-01 00:00:01.000000 UTC到2038-01-19 03:14:07.499999 UTC - 使用可选的fsp来表示秒的精度,fsp取值为0-6,默认为 0.
- 时区:支持时区,保存的时候会将值从当前时区转化为UTC 时区保存,查询的结果会从 UTC 时区转化为当前时区。
- 性能:底层使用 4 字节的 int 来存储秒数,如果存在毫秒则额外使用 1-4 个字节来存储毫秒数,
- 定义:表示日期和时间,存储从 epoch (
-
time[(fsp)]- 定义:只表示时间
- 格式:
hh:mm:ss[.fraction] - 范围:
-838:59:59.000000到838:59:59.000000 - 使用可选的fsp来表示秒的精度,fsp取值为0-6,默认为 0.
-
year[(4)]- 定义:4位数字格式表示的年份
- 格式:
YYYY - 范围:默认为
0000,或者为1901到2155
Debezium 对日期类型的处理
Flink CDC 的底层是 debezium,debezium 将自己伪装成 mysql 的 slave,通过向 mysql master 发送 dump 协议来建立主从关系,然后 mysql master 就会将 binlog 发送给 mysql slave 即 debezium,debezium 通过解析(反序列化) binlog 为特定的格式并写入 kafka topic。
那么对于上述 5 种 mysql 时间类型,debezium 是如何解析的呢?
YEAR
debezium 使用 <

本文详细分析了MySQL不同时间类型在FlinkCDC与ElasticSearch之间的同步问题,涉及Debezium解析策略和日期转换技巧。
最低0.47元/天 解锁文章
1136

被折叠的 条评论
为什么被折叠?



