You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Flink CDC Issue Import (Jira)" <ji...@apache.org> on 2024/03/20 09:21:00 UTC
[jira] [Commented] (FLINK-34784) [Bug] Datetime data inconsistency (off by 8 hours) in snapshot phase
[ https://issues.apache.org/jira/browse/FLINK-34784?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17828715#comment-17828715 ]
Flink CDC Issue Import commented on FLINK-34784:
------------------------------------------------
Date: Thu Mar 14 16:24:12 CST 2024, Author: [Xuxiaotuan|https://github.com/Xuxiaotuan]
Hello, until now this problem still exists, is it dependent on upstream updates?
([#1739|https://github.com/apache/flink-cdc/issues/1739] | [FLINK-1739|https://issues.apache.org/jira/browse/FLINK-1739]) This doesn't solve the problem
Flink version
1.18
Flink CDC version
3.0.1
Database and its version
MySQL 5.7+ & 8.0+
> [Bug] Datetime data inconsistency (off by 8 hours) in snapshot phase
> --------------------------------------------------------------------
>
> Key: FLINK-34784
> URL: https://issues.apache.org/jira/browse/FLINK-34784
> Project: Flink
> Issue Type: Bug
> Components: Flink CDC
> Reporter: Flink CDC Issue Import
> Priority: Major
> Labels: github-import
>
> ### Search before asking
> - [X] I searched in the [issues|https://github.com/ververica/flink-cdc-connectors/issues] and found nothing similar.
> ### Flink version
> 1.13.6/1.14
> ### Flink CDC version
> 2.2/2.3
> ### Database and its version
> MySQL 5.7+ & 8.0+
> ### Minimal reproduce step
> ([#1739|https://github.com/apache/flink-cdc/issues/1739] | [FLINK-1739|https://issues.apache.org/jira/browse/FLINK-1739])
> The issue still persists in snapshot phase and when MySQL is of CST timezone, and the reason is Debezium's Timestamp::toEpochMillis does not respect time zone:
> ![image|https://user-images.githubusercontent.com/20527912/230588397-e3d07c1b-1a5d-4659-b6b0-610ba36ac442.png)
> PRECONDITION:Server/local time zone are Asia/Shanghai (UTC+8),MySQL time zone is CST
> To reproduce the issue:
> 1. create a time with pk and datetime field and insert some random data:
> ```sql
> CREATE TABLE `batchdatetime` (
> `id` bigint NOT NULL AUTO_INCREMENT,
> `dt` datetime DEFAULT NULL,
> PRIMARY KEY (`id`)
> ]
> # insert data here
> mysql> select * from batchdatetime;
> +----+---------------------+
> | id | dt |
> +----+---------------------+
> | 1 | 2016-10-15 02:15:15 |
> | 2 | 2016-10-15 02:15:15 |
> +----+---------------------+
> ```
> 2. create cdc job using stream api
> ```java
> public static void main(String[] args) throws Exception {
> final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
> env.setParallelism(1);
> MySqlSource<String> mysqlSource = new MySqlSourceBuilder<String>()
> .databaseList("aps_test")
> .tableList("aps_test.batchdatetime")
> .hostname("localhost")
> .username("root")
> .password("")
> .serverTimeZone("Asia/Shanghai")
> .includeSchemaChanges(true)
> .deserializer(new JsonDebeziumDeserializationSchema())
> .scanNewlyAddedTableEnabled(true)
> .build();
> DataStreamSource<String> source = env.fromSource(mysqlSource, WatermarkStrategy.noWatermarks(), "mysql-source");
> source.print();
> env.execute();
> }
> ```
> 3. Start the job and witness how debezium brings inconsistency to datetime columns:
> ![image|https://user-images.githubusercontent.com/20527912/230589178-54adf54d-a797-45f3-b156-ffd95cc76907.png)
> dateTime.toInstant(ZoneOffset.UTC).toEpochMilli() = 1476497715000
> BUT 2016-10-15T02:15:15 corresponds to 1476468915000 in milliseconds in BOTH server and local time zone:
> AND we can verify this using the following SQL:
> ```sql
> mysql> select UNIX_TIMESTAMP(dt) * 1000 as aha from batchdatetime;
> +---------------+
> | aha |
> +---------------+
> | 1476468915000 |
> | 1476468915000 |
> +---------------+
> ```
> 4. The correct way to convert datetime to timestamp is `dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(]`
> and the +8 should've come from user specific dbz properties OR a default time zone of the system.
> ### What did you expect to see?
> {"before":null,"after":{"id":1,"dt":1476468915000},"source":{"version":"1.6.4.Final","connector":"mysql","name":"mysql_binlog_source","ts_ms":0,"snapshot":"false","db":"aps_test","sequence":null,"table":"batchdatetime","server_id":0,"gtid":null,"file":"","pos":0,"row":0,"thread":null,"query":null},"op":"r","ts_ms":1680861868595,"transaction":null}
> ### What did you see instead?
> {"before":null,"after":{"id":1,"dt":1476497715000},"source":{"version":"1.6.4.Final","connector":"mysql","name":"mysql_binlog_source","ts_ms":0,"snapshot":"false","db":"aps_test","sequence":null,"table":"batchdatetime","server_id":0,"gtid":null,"file":"","pos":0,"row":0,"thread":null,"query":null},"op":"r","ts_ms":1680861868595,"transaction":null}
> ### Anything else?
> Critical data inconsistency issue.
> ### Are you willing to submit a PR?
> - [X] I'm willing to submit a PR!
> ---------------- Imported from GitHub ----------------
> Url: https://github.com/apache/flink-cdc/issues/2074
> Created by: [qidian99|https://github.com/qidian99]
> Labels: bug,
> Created at: Fri Apr 07 18:05:12 CST 2023
> State: open
--
This message was sent by Atlassian Jira
(v8.20.10#820010)