Flink CDC 2.3 發布,更多連接器支持增量快照,新增 Db2 支持

燈惉 發佈 2022-12-02T01:08:30.032793+00:00

在 Flink CDC 開源的兩年多時間裡,社區成長迅速,目前 Flink CDC 社區已有 76 位貢獻者,7 位 Maintainer,社區釘釘用戶群超過 7800 人。


01

Flink CDC 簡介



Flink CDC [1] 是基於資料庫的日誌 CDC 技術,實現了全增量一體化讀取的數據集成框架。配合 Flink 優秀的管道能力和豐富的上下游生態,Flink CDC 可以高效實現海量數據的實時集成。



作為新一代的實時數據集成框架,Flink CDC 具有全增量一體化、無鎖讀取、並行讀取、表結構變更自動同步、分布式架構等技術優勢,同時社區提供了完整的文檔支持 [2]。在 Flink CDC 開源的兩年多時間裡,社區成長迅速,目前 Flink CDC 社區已有 76 位貢獻者,7 位 Maintainer,社區釘釘用戶群超過 7800 人。


02

Flink CDC 2.3 概覽



在社區用戶和貢獻者們的共同努力下, Flink CDC 2.3 正式發布了:

https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.3.0



2.3 版本共有 49 位社區貢獻者參與貢獻,累計解決 126 個 issue,合併了 133 個 PR,貢獻者們累計貢獻了 170+ 提交。從代碼分布上看,MySQL CDC, MongoDB CDC, Oracle CDC,增量快照框架(flink-cdc-base)模塊以及文檔模塊均為用戶帶來了很多特性和改進。


面對如此多的改進和特性,本文通過下圖帶你 3 分鐘快速了解 Flink CDC 2.3 版本的重大改進和核心特性。



  • 新增 Db2 CDC 連接器, 解鎖讀取 Db2 資料庫,支持全量和增量一體化同步。

  • MongoDB CDC,Oracle CDC 兩大連接器均接入了增量快照框架,從而提供了無鎖讀取,並發讀取和斷點續傳的能力。

  • MySQL CDC 連接器在 2.3 版本裡進行了諸多性能優化和穩定性大改進,極大提升了生產穩定性和性能。

  • Flink CDC 2.2 版本兼容了 Flink 1.13 和 Flink 1.14,Flink CDC 2.3 在此基礎上繼續兼容了 Flink 1.15 & 1.16 大版本,從而兼容了 Flink 的四個大版本。這意味著 CDC 的 SQL connector 可以跑在不同的 Flink 集群上而無需任何修改,如果是 DataStream 用戶也可以參考 SQL Connector 的打包方式,實現跨版本兼容。

  • OceanBase CDC 連接器支持將全部資料庫類型對接到 Flink SQL,也就是說 OceanBase 所有類型的欄位均支持同步。

  • MySQL CDC 和 OceanBase CDC 連接器提供中文文檔,這可以更好地幫助到中文用戶。


03

詳解核心特性和重要改進



Flink CDC 2.3 版本帶來了諸多重要的改進和特性,本文挑選最重要的四個進行深入解讀。


3.1 新增 Db2 CDC 連接器


Db2 是 IBM 開發的關係型資料庫 [3]。Db2 CDC 連接器可以捕獲 Db2 資料庫中表的行級變更,其實現原理是基於 ASN Capture/Apply agents 提供的 SQL 複製能力 ,將資料庫中開啟 capture mode 的表的變更存到指定的 change table 中。Db2 CDC 連接器首先通過 JDBC 讀取表中的歷史數據,再從 change table 中獲取增量變更數據,從而實現全增量同步。


3.2 MongoDB CDC,Oracle CDC 連接器支持增量快照算法


在 Flink CDC 2.3 版本中,MongoDB CDC 連接器和 Oracle CDC 連接器都對接到了 Flink CDC 增量快照框架上,實現了增量快照算法,從而提供無鎖讀取,並行讀取和斷點續傳的功能。



至此,Flink CDC 支持增量快照算法的數據源不斷擴大,在接下來的版本中,社區也在規劃讓更多的連接器對接到增量快照框架上。


3.3 MySQLCDC 連接器優化


作為社區最受用戶關注的 MySQL CDC 連接器,2.3 版本中社區引入了諸多高級特性,極大地提升了性能和穩定性,具體包括:


3.3.1 支持指定位點啟動


MySQL CDC 連接器支持從指定的位點啟動作業。可以通過 timestamp,binlog offset 或 binlog gtid 的方式指定作業啟動時的 binlog 具體位置,還支持設置為 earliest-offset 從最早的 binlog 位點啟動作業。


3.3.2 分片算法優化


2.3 版本對全量階段分片算法進行優化。將目前的同步分片改為異步進行,支持用戶指定主鍵中某一列作為分片的切分列,並且分片過程支持 checkpoint,提升了全量讀取階段時因為同步分片阻塞導致的性能問題。


3.3.3 穩定性提升


MySQL CDC 連接器支持全部字符集對接到 Flink SQL,解鎖更多用戶場景,支持寬容默認值提升作業對不規範 DDL 的容忍度,支持自動獲取資料庫的時區從而解決時區問題。


3.3.4 性能提升


2.3 版本 MySQL CDC 重點優化了內存和讀取性能,通過 JM 里的 meta 復用和 TM 中流式讀取等改進降低了 JM 和 TM 的內存使用;同時通過優化 binlog 解析邏輯提升了 binlog 讀取性能。


3.4 其他改進


  • Flink CDC 2.3 版本兼容了 Flink 1.13,1.14,1.15 和 1.16 四個大版本,極大地降低用戶 Connector 的升級和運維成本。

  • OceanBase CDC 修復了時區問題,支持全類型對接到 Flink SQL,並提供了更多的配置項,支持更靈活的配置。如新增加 table-list 配置項,支持訪問多張 OceanBase 數據表等。

  • MongoDB CDC 支持了更多的數據類型,優化了捕獲表的篩選過程。

  • TiDB CDC 修復了全增量切換時數據丟失問題,支持讀取時 region 切換。

  • Postgres CDC 支持 geometry 類型,開放了更多配置項,支持配置 changelog mode 來過濾發送的數據。

  • SqlServer CDC 支持了更多的版本,並對文檔 [4]進行完善。

  • MySQL CDC 和 OceanBase CDC 連接器提供了中文文檔 [5][6],此外還對 OceanBase CDC 連接器提供了視頻教程 [7]。


04

未來規劃



Flink CDC 開源社區的發展,得益於貢獻者們的無私貢獻和 Maintainer 成員的開源布道,更離不開廣大 Flink CDC 用戶群體的積極反饋和宣傳布道,Flink CDC 社區將會繼續做好開源社區建設。當前 Flink CDC 社區正在做 2.4 版本的規劃 [8],也歡迎所有用戶和貢獻者參與反饋,在接下來的 2.4 版本,社區主要方向計劃從下述四個方面展開:


  • 數據源完善


支持更多的數據源,推動更多的 CDC 連接器接入增量快照框架,支持無鎖讀取、並發讀取、斷點續傳等特性。


  • 可觀測性提升


提供限流功能,以降低全量階段對資料庫產生的查詢壓力;提供更豐富的監控指標,可以獲取到任務進度相關指標監控任務狀態。


  • 性能提升


全量階段支持使用 Batch 模式同步全量階段數據,提升全量階段性能;全量讀取階段結束後自動釋放空閒 reader 資源等。


  • 易用性提升


提升連接器的易用性,比如簡化開箱即用的配置參數,提供 Datastream API 程序示例等。


致謝:


感謝所有為 Flink CDC 2.3 版本做出貢獻的覃立輝、莫賢彬、rookiegao、He Wang 等 49 位社區貢獻者,特別感謝社區的四位 Maintainer 成員阮航、孫家寶、龔中強和任慶盛為 2.3 版本發布所做的傑出工作。


阿里雲實時計算 Flink 版提供更多企業級 Flink CDC 能力 [9],包括了分庫分表合併、表結構變更同步、整庫同步等重要功能,更好的支持了阿里雲實時數倉 ODPS-Hologres 等產品,同時使用可無縫構建實時數據倉庫。歡迎感興趣的用戶移步阿里雲產品官網體驗使用。


貢獻者列表:


01410172,Amber Moe,Dezhi Cai,Enoch,Hang Ruan,He Wang,JiaJia,Jiabao Sun,Junwang Zhao,Kyle Dong,Leonard Xu,Matrix42,Paul Lin,Qingsheng Ren,Qishang Zhong,Rinka,Sergey Nuyanzin,Tigran Manasyan,camelus,dujie,ehui,empcl,fbad,gongzhongqiang,hehuiyuan,hele.kc,hsldymq,jiabao.sun,legendtkl,leixin,leozlliang,lidoudou1993,lincoln lee,lxxawfl,lzshlzsh,molsion,molsionmo,pacino,rookiegao,skylines,sunny,vanliu,wangminchao,wangxiaojing,xieyi888,yurunchuan,zhmin,阿洋,莫賢彬


附錄:


[1] https://github.com/ververica/flink-cdc-connectors

[2] https://ververica.github.io/flink-cdc-connectors

[3] https://www.ibm.com/products/db2

[4] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/sqlserver-cdc.html

[5] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/mysql-cdc%28ZH%29.html

[6] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/oceanbase-cdc%28ZH%29.html

[7] https://ververica.github.io/flink-cdc-connectors/release-2.3/content/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/oceanbase-tutorial-zh.html

[8] https://github.com/ververica/flink-cdc-connectors/issues/1728

[9] https://www.alibabacloud.com/help/zh/realtime-compute-for-apache-flink/latest/data-synchronization-quick-start


推薦閱讀

關鍵字: