flinkCDC抽取Oracle数据的时候,时间多了十六个小时,这个大家是怎么解决的啊?
Flink CDC 从 Oracle 提取数据时出现时间增加 16 小时的问题可能是由于时区设置不当造成的。Oracle 数据库使用 UTC 时区存储时间戳,而 Flink 默认使用系统时区。
要解决此问题,请确保 Flink 和 Oracle 数据库使用相同的时区。可以在 Flink 配置中设置时区,如下所示:
env.getConfig.setLocalTimeZone(TimeZone.getTimeZone("UTC"))
或者,可以在 Oracle 数据库连接字符串中指定时区,如下所示:
jdbc:oracle:thin:@//localhost:1521/orcl?oracle.jdbc.timezoneAsRegion=false&oracle.jdbc.V8Compatible=true&oracle.jdbc.thin.SetQueryTimeout=60
其中:
oracle.jdbc.timezoneAsRegion 设置为 false 以禁用时区作为区域的解析。
oracle.jdbc.V8Compatible 设置为 true 以启用与 Oracle 8 兼容的日期时间处理。
oracle.jdbc.thin.SetQueryTimeout 设置查询超时时间(以秒为单位)。
确保 Flink 和 Oracle 数据库使用相同的时区后,时间戳应正确提取。
示例:
以下示例说明如何在 Flink 配置中设置时区:
import org.apache.flink.api.common.ExecutionConfig;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class FlinkOracleCDC {
public static void main(String[] args) {
// 创建 StreamExecutionEnvironment
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 设置时区为 UTC
ExecutionConfig config = env.getConfig();
config.setLocalTimeZone(TimeZone.getTimeZone("UTC"));
// ... 其余 Flink CDC 代码 ...
}
}
请注意,您还需要根据您的 Oracle 数据库配置调整 JDBC 连接字符串。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。