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時間戳
- mysql資料庫時間戳函式MySql資料庫時間戳函式
- flink-cdc實時同步(oracle to mysql)OracleMySql
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- expdp指定時間戳匯出防止資料不一致時間戳
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- [Flink/CDC/資料整合] 資料增量整合方案:Flink CDC
- mysql將時間戳直接轉換成日期時間,mysql查詢某一天的資料。MySql時間戳
- restore、recover到指定時間REST
- Flink CDC 系列 - 同步 MySQL 分庫分表,構建 Iceberg 實時資料湖MySql
- MySQL時間戳轉成日期格式MySql時間戳
- mysql將時間戳轉成常用可讀時間格式MySql時間戳
- 時間型別和時間戳型別時間戳
- 時間轉換成時間戳時間戳
- C 時間轉換時間戳時間戳
- C# 時間戳轉時間C#時間戳
- JavaScript 時間戳JavaScript時間戳
- kafka時間戳Kafka時間戳
- 基於時間戳閃回資料庫時間戳資料庫
- MySQL 時間戳的 獲取 & 轉換為特定時間格式MySql時間戳
- sqlite、mysql 將時間戳轉換成本地時間語句SQLiteMySql時間戳
- javascript時間戳與php返回的時間戳統一JavaScript時間戳PHP
- 基於 Flink CDC 打造企業級實時資料整合方案
- C 時間戳轉換成時間時間戳
- 時間戳轉化為時間格式時間戳
- 兩個時間戳的時間差時間戳
- java時間戳和PHP時間戳的轉換phptime()Java時間戳PHP
- MySQL 資料庫技巧:批次更新隨機生成的時間戳欄位MySql資料庫隨機時間戳
- 實時採集MySQL資料之輕量工具Maxwell實操MySql
- rman恢復到指定時間點
- mysql獲取今天、昨天0點時間戳MySql時間戳
- Linux下檔案內容更新了,資料夾時間戳卻沒變?Linux時間戳
- Flink CDC+Kafka 加速業務實時化Kafka
- VNPY2 中凌晨0點時間戳的處理問題,和夜盤資料時間戳分析時間戳
- 時間戳與時間字串的多時區轉換時間戳字串
- PLC實時資料採集如何實現?
- c++ 獲取當前時間周初凌晨時間戳(獲取當前時間週一凌晨時間戳)C++時間戳