开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

大家有遇到 flink on k8s 上提交job dateTime类型数据差8小时吗

大家有遇到 flink on k8s 上提交job dateTime类型数据差8小时吗

展开
收起
JWRRR 2023-04-03 14:57:45 463 0
3 条回答
写回答
取消 提交回答
  • 数据类型改成带时区的此回答整理自钉群“【③群】Apache Flink China社区”

    2023-04-03 16:48:36
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在 Flink on Kubernetes 上,如果提交的 Job 中使用了 DateTime 类型,可能会出现时间差 8 小时的情况。这是因为 Flink 默认使用 UTC 时区,而 Kubernetes 默认使用 UTC+8(北京时间)时区。

    解决这个问题的方法是,在提交 Job 时,通过 FLINK_PROPERTIES 环境变量,为 Flink 设置 user.timezone 属性,指定使用的时区。例如:

    $ kubectl create job flink-submit \
        --from=cronjob/flink \
        --env FLINK_PROPERTIES="user.timezone=Asia/Shanghai" \
        -- /opt/flink/bin/flink run /opt/flink/examples/streaming/SocketWindowWordCount.jar --port 9000
    

    在这个例子中,将时区设置为 Asia/Shanghai,即北京时间。这样,在 Flink Job 中使用 DateTime 类型时,就会使用正确的时区。

    2023-04-03 15:25:19
    赞同 展开评论 打赏
  • 存在即是合理

    在Flink中,DateTime类型数据默认使用UTC时区,而Kubernetes集群的默认时区可能是不同的。如果您将DateTime类型数据作为事件时间字段使用,则需要在Flink作业中正确配置时区信息以处理时差问题。

    有两种方法可以解决这个问题:

    使用Flink的时区配置 在Flink作业中,您可以通过设置env.getConfig().setLocalTimeZone(TimeZone.getTimeZone("UTC+8"))将Flink的时区设置为UTC+8。这将使Flink将DateTime类型数据解析为UTC+8时区的时间,并将其与事件时间进行比较。

    使用Kubernetes的时区配置 另一种方法是在Kubernetes中设置时区,以确保Flink作业运行的节点和Kubernetes集群的时区一致。您可以通过将TZ环境变量设置为所需的时区来设置时区。例如,将TZ设置为Asia/Shanghai将使Kubernetes节点使用中国标准时间。

    2023-04-03 15:12:43
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    ACK 云原生弹性方案—云原生时代的加速器 立即下载
    ACK集群类型选择最佳实践 立即下载
    企业运维之云原生和Kubernetes 实战 立即下载

    相关镜像