Flink CDC 採集MySQL 初始化或者指定時間戳時,沒有采集到資料
介紹
在使用 Flink 1.13.x 整合 CDC 2.3.0 時,如果遇到時間戳作為起點開始採集但沒有采集到資料的問題,可能有以下幾個原因:
解決方案
時區問題:Flink 執行機器時區和 MySQL Server 時區不匹配,database.serverTimezone 配置會受到影響。解決辦法是手動指定 Flink 執行的時區,和連線的資料庫時區資訊保持一致1。例如,可以在資料庫屬性中新增 dbProps.put("database.serverTimezone", "UTC");。
包衝突:Flink 為了解決包衝突,對一些通用的工具包做了 shaded1。Flink CDC Connectors 2.3.0 版本引用了 Flink 1.16.0,這個版本的 Flink 使用了 flink-shaded-guava:30.1.1-jre-15.0 版本。而 Flink 1.13.0 使用的是 flink-shaded-guava:18.0-13.0 版本,兩個版本的 shaded package 不一樣引起的。解決方法是在 CDC 中再次 shaded 一下,讓 CDC 裡面引用到的 guava30 變為 guava18。
程式碼示例
import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema; import com.ververica.cdc.connectors.mysql.source.MySqlSource; public class MySqlSourceExample { public static void main(String[] args) throws Exception { // 建立 Properties 物件 Properties properties = new Properties(); // 設定時區為 "Asia/Shanghai" properties.setProperty("database.serverTimezone", "Asia/Shanghai"); MySqlSource<String> mySqlSource = MySqlSource.<String>builder() .hostname("yourHostname") .port(yourPort) .databaseList("yourDatabaseName") // set captured database, If you need to synchronize the whole database, Please set tableList to ".*". .tableList("yourDatabaseName.yourTableName") // set captured table .username("yourUsername") .password("yourPassword") .debeziumProperties(properties) .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String .build(); StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // enable checkpoint env.enableCheckpointing(3000); env .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source") // set 4 parallel source tasks .setParallelism(4) .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering env.execute("Print MySQL Snapshot + Binlog"); } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024433/viewspace-2985515/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flink cdc 2.2.0版本不能配置指定時間戳或者binlog位置採集時間戳
- MySQL時間戳、時間MySql時間戳
- flink-cdc實時同步(oracle to mysql)OracleMySql
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- [Flink/CDC/資料整合] 資料增量整合方案:Flink CDC
- 獲取時間戳,幾個時間點的時間戳時間戳
- Flink CDC 系列 - 同步 MySQL 分庫分表,構建 Iceberg 實時資料湖MySql
- MySQL字串轉時間戳查詢MySql字串時間戳
- MySQL時間戳轉成日期格式MySql時間戳
- MySQL 時間戳的 獲取 & 轉換為特定時間格式MySql時間戳
- C# 時間戳轉時間C#時間戳
- 時間型別和時間戳型別時間戳
- JavaScript 時間戳JavaScript時間戳
- kafka時間戳Kafka時間戳
- 基於 Flink CDC 打造企業級實時資料整合方案
- Linux下檔案內容更新了,資料夾時間戳卻沒變?Linux時間戳
- MySQL 資料庫技巧:批次更新隨機生成的時間戳欄位MySql資料庫隨機時間戳
- 兩個時間戳的時間差時間戳
- 時間戳轉化為時間格式時間戳
- Excel中時間戳轉換時間Excel時間戳
- mysql獲取今天、昨天0點時間戳MySql時間戳
- 實時採集MySQL資料之輕量工具Maxwell實操MySql
- 【時間戳轉普通時間格式的方法】時間戳
- VNPY2 中凌晨0點時間戳的處理問題,和夜盤資料時間戳分析時間戳
- 3.1.2 啟動時指定資料庫初始化引數資料庫
- Python3時間戳轉換為指定格式的日期Python時間戳
- 教你如何使用MySQL中CURRENT_TIMESTAMP時間戳MySql時間戳
- apscheduler 在伺服器上沒有按照指定的時間執行定時任務伺服器
- Restcloud ETl資料通過時間戳實現增量資料同步RESTCloud時間戳
- c++ 獲取當前時間周初凌晨時間戳(獲取當前時間週一凌晨時間戳)C++時間戳
- 時間戳與時間字串的多時區轉換時間戳字串
- java休眠到指定時間怎麼寫?Java
- MySQL實現當前資料表的所有時間都增加或減少指定的時間間隔(推薦)MySql
- Unix 時間戳與日期時間戳
- 格式化時間 戳
- DM7使用DMRMAN恢復資料庫到指定時間點/LSN資料庫
- PLC實時資料採集如何實現?