Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致?
问题描述
Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为不一致
根因分析
该问题的根因是数据库设置的时区不合理,通常该问题出现时Flink读取的时间和RDS数据库的时间会相差13小时。
请在RDS数据库内执行如下语句
show variables like '%time_zone%'
参数 |
说明 |
---|---|
system_time_zone |
数据库时区。 这里它指向 'SYSTEM',也就是数据库服务器的系统时间('system_time_zone')。而这个系统时间在这里指向 CST,所以,最终数据库时区才是 CST。 |
time_zone |
数据库所在服务器的时区,服务器是台主机。 如本地数据库所在计算机的默认时区是中国标准时间,则查出来 'system_time_zone' 是 CST。 |
问题根因:在Mysql的time_zone是SYSTEM,system_time_zone是CST的情况下会造成bug。
CST在mysql里被理解为China Standard Time(UTC+8),但在 Java 里被理解为Central Standard Time (USA)(UTC-5)。
Flink taskmanager本质是一个 java 进程,在Mysql 的jdbc驱动的代码里会设置时区,这个时区是通过TimeZone.getTimeZone(canonicalTimezone) 读取的。也就是说,读取的是CST(UTC+8),但真正设置的时区却是CST(UTC-5)。
Flink SQL作业相关问题 所有常见问题
- Flink SQL作业的消费能力如何,即一天可以处理多大的数据量?
- Flink SQL中的temp流中数据是否需要定期清理,如何清理?
- 创建Flink SQL作业时选择OBS桶,提示未授权
- Flink SQL作业将OBS表映射为DLI的分区表
- Flink SQL作业Kafka分区数增加或减少,不用停止Flink作业,实现动态感知
- OBS表如何映射为DLI的分区表?
- 在Flink SQL作业中创建表使用EL表达式,作业运行报DLI.0005错误
- Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
- Flink SQL作业运行失败,日志中有connect to DIS failed java.lang.IllegalArgumentException: Access key cannot be null错误
- Flink SQL作业读取DIS数据报Not authorized错误
- Flink SQL作业消费Kafka后sink到es集群,作业执行成功,但未写入数据
- Flink Opensource SQL如何解析复杂嵌套 JSON?
- Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致?
- Flink SQL和Flink Opensource SQL的语法有什么区别?
- Flink Opensource SQL Elasticsearch结果表failure-handler参数填写retry_rejected导致提交失败
more