一文搞懂 MySQL、debezium 和 ElasticSearch 的时间格式

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

前言

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

整个项目的数据架构如下:

在这里插入图片描述

MySQL的数据类型

以 MySQL 5.7 版本为例,MySQL 的时间类数据类型包括:DATE, YEAR, TIME, DATETIME, TIMESTAMP 5种。

  • date

    • 定义:只表示日期
    • 存储格式:YYYY-MM-DD
    • 取值范围:1000-01-01 to 9999-12-31
  • datetime[(fsp)]

    • 定义:表示日期和时间
    • 存储格式:YYYY-MM-DD hh:mm:ss[.fraction]
    • 存储范围:1000-01-01 00:00:00.0000009999-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 UTC2038-01-19 03:14:07.499999 UTC
    • 使用可选的fsp来表示秒的精度,fsp取值为0-6,默认为 0.
    • 时区:支持时区,保存的时候会将值从当前时区转化为UTC 时区保存,查询的结果会从 UTC 时区转化为当前时区。
    • 性能:底层使用 4 字节的 int 来存储秒数,如果存在毫秒则额外使用 1-4 个字节来存储毫秒数,
  • time[(fsp)]

    • 定义:只表示时间
    • 格式:hh:mm:ss[.fraction]
    • 范围:-838:59:59.000000838:59:59.000000
    • 使用可选的fsp来表示秒的精度,fsp取值为0-6,默认为 0.
  • year[(4)]

    • 定义:4位数字格式表示的年份
    • 格式:YYYY
    • 范围:默认为0000,或者为19012155

Debezium 对日期类型的处理

Flink CDC 的底层是 debeziumdebezium 将自己伪装成 mysqlslave,通过向 mysql master 发送 dump 协议来建立主从关系,然后 mysql master 就会将 binlog 发送给 mysql slavedebeziumdebezium 通过解析(反序列化) binlog 为特定的格式并写入 kafka topic

那么对于上述 5 种 mysql 时间类型,debezium 是如何解析的呢?

YEAR

debezium 使用 <

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值