大家有遇到 flink on k8s 上提交job dateTime类型数据差8小时吗
在 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 类型时,就会使用正确的时区。
在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节点使用中国标准时间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。