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

flinkCDC抽取Oracle数据的时候,时间多了十六个小时,这个大家是怎么解决的啊?

flinkCDC抽取Oracle数据的时候,时间多了十六个小时,这个大家是怎么解决的啊?

展开
收起
wenti 2023-01-30 12:57:47 408 0
1 条回答
写回答
取消 提交回答
  • Flink CDC 从 Oracle 提取数据时出现时间增加 16 小时的问题可能是由于时区设置不当造成的。Oracle 数据库使用 UTC 时区存储时间戳,而 Flink 默认使用系统时区。

    要解决此问题,请确保 Flink 和 Oracle 数据库使用相同的时区。可以在 Flink 配置中设置时区,如下所示:

    设置 Flink 的时区为 UTC

    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 连接字符串。

    2024-02-27 17:40:47
    赞同 展开评论 打赏

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

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像