Flink同步到ES时间遇到的问题

背景

  • 使用Flink SQL把MySQL的数据同步到ES,MySQL的时间是东八区时间,同步到Elasticsearch,发现时间总是有问题。

问题

  • 1、查询出来的时间总是+8小时。

解决方案:项目中jackson配置会把UTC时间转换,所以在存入时间就-8小时转成UTC时间就没毛病。

  • 2、时间范围查询出来的数据不准。

解决方案:存入的时间有转换,范围查询要设置timeZone,否则查询不准。

附录

返回数据使用jackson验证过程

  • 范围查询核心代码
java 复制代码
  // 创建时间范围查询
   if (ObjectUtil.isNotEmpty(request.getCreateTimeStart()) || ObjectUtil.isNotEmpty(request.getCreateTimeEnd())) {
        RangeQueryBuilder createTimeRange = QueryBuilders.rangeQuery("createTime");
        // 指定时区
        createTimeRange.timeZone("GMT+8");
        if (ObjectUtil.isNotEmpty(request.getCreateTimeStart())) {
            createTimeRange.gte(cn.hutool.core.date.DateUtil.format(request.getCreateTimeStart(), "yyyy-MM-dd HH:mm:ss"));
        }
        if (ObjectUtil.isNotEmpty(request.getCreateTimeEnd())) {
            createTimeRange.lte(cn.hutool.core.date.DateUtil.format(request.getCreateTimeEnd(), "yyyy-MM-dd HH:mm:ss"));
        }
        mainQuery.filter(createTimeRange);
    }
  • 同步时转为UTC时间
sql 复制代码
TO_TIMESTAMP(DATE_FORMAT(res.createTime - INTERVAL '8' HOUR, 'yyyy-MM-dd HH:mm:ss')) as createTime
  • 增加配置
yml 复制代码
  jackson:
    locale: zh_CN
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
  • 会使用jackson的配置转换时间

小结

  • 理解Elasticsearch 内部固定使用 UTC 时间存储所有日期类型字段。实际上这2个问题是时间没对其的缘故,存入数据转成UTC时间,范围查询用东八区时间就没有问题。
相关推荐
西邮彭于晏几秒前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
Elastic 中国社区官方博客3 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
西邮彭于晏5 小时前
Git 标签(Tag)与版本发布完整指南|附全场景命令速查表
大数据·git·elasticsearch
Elasticsearch5 小时前
Elasticsearch:搜索教程 - 语义搜索(三)
elasticsearch
Elasticsearch6 小时前
Elasticsearch:搜索教程 - 向量搜索(二)
elasticsearch
Devin~Y9 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
Elasticsearch20 小时前
Elasticsearch:搜索教程 - 全文搜索(一)
elasticsearch
spider_xcxc1 天前
Argo CD App of Apps 模式深度解析:像管理应用一样管理应用
大数据·数据库·elasticsearch
Elasticsearch1 天前
你拥有 IP,你想要主机名:为 OpenTelemetry 构建一个查找处理器
elasticsearch
Elasticsearch1 天前
超越调试: GenAI 如何将日志转化为业务智能
elasticsearch