Flink CDC 2.2 正式發布,新增四種數據源,支持動態加表,提供增量快照框架

          來源:CSDN博客 | 2022-03-31 09:08:24 |

          前言

          Flink CDC (CDC Connectors for Apache Flink?)[1]?是 Apache Flink? 的一組 Source 連接器,支持從 MySQL,MariaDB, RDS MySQL,Aurora MySQL,PolarDB MySQL,PostgreSQL,Oracle,MongoDB,SqlServer,OceanBase,PolarDB-X,TiDB 等數據庫中實時地讀取存量歷史數據和增量變更數據,用戶既可以選擇用戶友好的 SQL API,也可以使用功能更為強大的 DataStream API。

          作為新一代的數據集成框架, Flink CDC 不僅可以替代傳統的 DataX 和 Canal 工具做實時數據同步,將數據庫的全量和增量數據一體化地同步到消息隊列和數據倉庫中;也可以用于實時數據集成,將數據庫數據實時入湖入倉;同時還支持強大的數據加工能力,可以通過 SQL 對數據庫數據做實時關聯、打寬、聚合,并將物化結果寫入到各種存儲中。

          相對于其他數據集成框架,Flink CDC 具有全增量一體化、無鎖讀取、并發讀取、表結構變更自動同步、分布式架構等技術優勢,在開源社區中非常受歡迎,成長迅速,文檔完善[2],目前社區已有 44 位貢獻者,4 位Maintainer,社區用戶群超過 4000 人。

          一、Flink CDC 2.2 概覽

          經過3個多月的緊張開發,在社區開發者們的共同努力下,Flink CDC 2.2 版本正式發布了:

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

          2.2 版本共有 34 位社區貢獻者參與貢獻,累計貢獻了 110+ commits。一圖勝千言,本文通過下圖帶你一分鐘快速了解 Flink CDC 2.2 版本的重大改進和核心特性。

          2.2 版本新增 OceanBase,PolarDB-X,SqlServer,TiDB 四種數據源接入,均支持全量和增量一體化同步。至此,Flink CDC 已支持 12 種數據源。

          Flink CDC 兼容 Flink 1.13 和 Flink 1.14 兩個大版本,2.2 版本的所有 Connector 都支持跑在 Flink 1.13.* 或 Flink 1.14.* 的集群上。

          提供增量快照讀取框架,方便其他連接器接入,其他連接器采用該框架后,便可以提供無鎖算法,并發讀取,斷點續傳等功能。

          MySQL CDC 支持動態加表,該功能可以在無需重新讀取已有表的基礎上,增加需要監控的表,添加的表會自動先同步該表的全量數據再無縫切換到同步增量數據。

          MongoDB CDC 支持正則表達式過濾集合,該功能可以讓用戶在作業中指定所需監控的庫名和集合名,用戶可以用一個作業中監控多個數據庫或多個集合。

          二、新增 4 種數據源支持

          Flink CDC 2.2 版本新增了 OceanBase CE,PolarDB-X,SqlServer,TiDB 四種數據源接入。其中新增 OceanBase CDC,SqlServer CDC,TiDB CDC 三個連接器,而 PolarDB-X 的支持則是通過對 MySQL CDC 連接器進行兼容適配實現。

          OceanBase CE

          OceanBase CE[3]是一款開源分布式數據庫管理系統,同時支持在線事務處理與在線分析處理。OceanBase CDC 的實現機制是全量部分通過 JDBC 讀取表中的歷史數據,增量部分則是通過 OceanBase 提供 LogProxy Client 獲取增量變更數據。

          PolarDB-X

          PolarDB-X[4]是一款云原生分布式數據庫系統。PolarDB-X 高度兼容 MySQL 系統及生態等特點, 其內部的日志節點提供了完全兼容 MySQL Binlog 格式和協議的增量消費能力。這些特性是的 PolarDB-X 通過適配 MySQL CDC 即可快速接入 Flink CDC,PolarDB-X 的支持正式通過 MySQL CDC 適配實現,這種方式接入代價相對較小,但卻可以獲取 MySQL CDC 連接器的全部能力。

          SqlServer

          SqlServer[5]是一種使用廣泛的數據庫, SqlServer CDC 連接器支持捕獲并記錄 SqlServer 數據庫服務器中發生的行級變更,其原理是使用 SqlServer 自身提供的 CDC 特性,SqlServer自身提供的 CDC 能力可以將數據庫中指定的變更存檔到指定的 change tables 中。SqlServer CDC 連接器首先通過 JDBC 讀取表中的歷史數據,再從 change tables 中或缺增量變更數據,從而實現全增量同步。

          TiDB

          TiDB[6]是一款開源分布式關系型數據庫,同時支持在線事務處理與在線分析處理。TiDB CDC 的原理是通過直接讀取其底層 TiKV 存儲中的全量數據和增量數據實現數據捕獲,其中全量部分是通過按 key 劃分 range 讀取,增量部分使用 TiDB 提供的 CDC Client 獲取增量變更數據。

          三、詳解核心 feature 和重要改進

          3.1 核心 feature

          提供增量快照讀取框架

          大家都知道之前只有 MySQL CDC 支持無鎖 + 多并發 + 全程斷點續傳等高級功能,這些功能最開始是在 2.0 版本中為 MySQL CDC 定制的增量快照讀取算法實現,2.2 版本將增量快照讀取算法抽象成了公共框架,方便其他 connector 接入。

          在增量框架完成后,其他 connector 只需要接入這個框架便可以提供無鎖算法,并發讀取,斷點續傳的能力。社區提供了一個基于增量快照框架的樣例實現[7],開發者可以參考該樣例實現一個支持增量快照讀取的 CDC Source。

          兼容 Flink 1.13 & Flink 1.14

          在 2.2 版本之前,Flink CDC 連接器都只對應一個 Flink 大版本,比如很多用戶反饋 Flink CDC 2.1 只能在 Flink 1.13 版本的集群上使用,沒法在 Flink 1.14 的集群上使用。為了幫用戶解決此類問題, Flink CDC 2.2 版本兼容 Flink 1.13.* 和 Flink 1.14.* 兩個大版本,這意味 2.2 版本的所有 Connector 既可以跑在 Flink 1.13.* 集群上,又可以跑在 Flink 1.14.* 的集群上。通過提供兼容多版本的能力,讓 Flink CDC 在提供 1.14 支持的同時,還極大地降低用戶的 connector 管理成本。

          MySQL CDC 支持動態加表

          設想下假如你一個 CDC pipeline 監控了 4 張表,突然有天業務需求需要再加幾張表,你肯定不想另起作業 (浪費資源),那么這個 feature 可以讓你在當前作業直接增加需要監控的表。新增表都是先做全量再優雅地切換到增量,遇到新增監控表時不用新起作業,極大地節約了資源。Flink CDC 網站也提供了該功能的使用文檔[2],用戶在開發時可以參考。

          MongoDB CDC 支持自定義數據庫,自定義集合

          在 2.1 版本里 MongoDB CDC 只能捕獲單個集合或者單個 DB 下的全部集合,2.2 版本提供了正則匹配支持,用戶可以指定自己需要的多個庫和多個表。

          MySQL CDC 支持 MySQL 5.6

          從 2.2 版本開始, MySQL CDC 支持了 MySQL 5.6 版本,滿足低版本的 MySQL 用戶需求。

          3.2 重要改進

          MySQL CDC 通過心跳信息解決 binlog 過期問題

          大家可能遇到過 binlog 過期問題,這種問題一般出現在更新緩慢的表身上,這是因為 state 中記錄的慢表位點總是最后一次更新的位點,假如 MySQL server 端只保留最近 1 天的 binlog,而某個慢表最近一天都沒有更新過,那么 state 中記錄的該表位點還是一天以前的位點,當 MySQL server 清理 binlog 后,作業再次訪問該位點就會報 binlog 無法找到的錯誤。2.2 版本中通過心跳信息,將慢表的位點保持與當前 binlog 位點同步,避免了慢表 binlog 過期問題。

          MySQL CDC 修復數組越界問題

          該問題的根因是 MySQL CDC 依賴的第三方 binlog Client 存在數組越界 Bug,且是一個和網絡相關的不穩定復現 Bug。在 Flink CDC 2.2 版本中,社區對這個問題做了修復,提升了MySQL CDC binlog 讀取階段的穩定性。

          Oracle CDC 修復 Numeric 類型映射問題

          在 2.1 版本,Oracle CDC 在處理 Numeric 類型數據會出現轉換異常,在 2.2 版本中做了修復。

          四、總結和展望

          作為一個發起時間不到兩年的新興項目,Flink CDC 項目取得了現象級的發展和關注,這得益于 Flink CDC 開源社區所有貢獻者們的無私貢獻和開源布道, 更離不開廣大 Flink CDC 用戶群體的積極反饋。作為 2022 年的第一個版本,Flink CDC 給大家帶來如此多的技術改進和核心特性,相信這些改進能夠幫助廣大的開發者和用戶在各自的領域獲得更多突破。Flink CDC 社區將會繼續做好開源社區建設,在接下來的社區規劃中,主要有四個方向。

          完善 CDC 技術

          推動增量快照框架在各個 CDC 連接器的使用,讓更多的數據源快速支持無鎖讀取、并發讀取、斷點續傳、動態加表等特性。

          擴展數據集成場景

          CDC 只是解決一個 source 問題,很多業務需要結合整個數據場景全局地設計方案,比如更好地集成實時數倉、數據湖的下游生態,包括 Hudi、Iceberg、ClickHouse、Doris等。

          進一步降低 CDC 數據入湖入倉的門檻,解決整庫同步、表結構變更同步等痛點。

          提升 Connector 性能

          現有一些 Connector 在海量數據場景,大規模生產業務場景下,存在一定的性能問題,需要社區投入更多的開發者打磨。

          擴大數據庫生態

          支持更多的數據庫,如 DB2, Vitness 等。

          致謝:

          感謝所有為該版本做出貢獻的 34 位社區貢獻者,特別感謝來自 OceanBase 團隊的 He Wang 貢獻的 OceanBase CDC 連接器,來自大健云倉公司的 gongzhognqiang 貢獻的 Sqlserver CDC 連接器,來自云賬戶公司的 eastfisher 貢獻的 TiDB CDC 連接器, 來自 PolarDB-X 團隊的 hele.kc 對 PolarDB-X 支持與適配。

          完整貢獻者列表:

          Dian Qi, He Wang, Jark Wu, Jiabao Sun, Jingsong Lee, Junwang Zhao, Konstantin Knauf, Leonard Xu, Mustang Kong, Paul Zhang, Qingsheng Ren, Sergey Nuyanzin, Shengkai, Tuple, Xianxun Ye, Xuebing Li, Zongwen Li, camelusluo, eastfisher, ehui, fangpc, gongzhongqiang, hele.kc, hiscat, luoyuxia, paul8263, skylines, szgeqin, taox, tsreaper, wangxiaojing, wysstartgo, yexianxun, 元組 (從commit 信息提取,按字母排序)

          附錄

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

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

          [3] https://open.oceanbase.com

          [4] https://polardbx.com

          [5] https://www.microsoft.com/en-us/sql-server

          [6] https://docs.pingcap.com/zh/tidb/stable

          [7] https://github.com/ververica/flink-cdc-connectors/blob/master/flink-cdc-base/src/test/java/com/ververica/cdc/connectors/base/MySqlChangeEventSourceExampleTest.java#L45

          [8] https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc.html#scan-newly-added-tables

          更多 Flink CDC 相關技術問題,可掃碼加入釘釘交流群

          彩蛋

          線上?Flink CDC Meetup籌備中

          掃描下方二維碼,或點擊「閱讀原文」,參與 Flink CDC?問卷調查,我們會認真聽取你的想法

          延伸閱讀

          ▼ 關注「Apache Flink」,獲取更多技術干貨?▼

          更多 Flink 相關技術問題,可掃碼加入社區釘釘交流群~

          戳我,參與 Flink CDC 問卷調查~

          關鍵詞:

          亚洲av女电影网| 久久精品国产亚洲7777| 亚洲AV无码乱码在线观看富二代| 无码不卡亚洲成?人片| 国产成人精品久久亚洲高清不卡| 亚洲色大情网站www| 亚洲色少妇熟女11p| 亚洲GV天堂无码男同在线观看| 亚洲区日韩精品中文字幕| 亚洲va久久久久| 亚洲日韩AV一区二区三区四区| 亚洲看片无码在线视频| 亚洲色精品VR一区区三区| 亚洲制服丝袜第一页| 亚洲大尺码专区影院| 亚洲国产精品午夜电影| 亚洲人成高清在线播放| 亚洲AV无码精品蜜桃| 久久综合久久综合亚洲| 亚洲欧洲无码一区二区三区| 亚洲国产成人无码AV在线影院| 亚洲国产精品18久久久久久| 少妇亚洲免费精品| 久久久久亚洲精品天堂久久久久久| 久久久久国产亚洲AV麻豆 | 亚洲国产午夜中文字幕精品黄网站| 国产区图片区小说区亚洲区| 亚洲国产精品无码久久青草| 亚洲午夜精品久久久久久浪潮| 中文字幕在亚洲第一在线| 国产亚洲精品岁国产微拍精品| 亚洲AV无码成人精品区蜜桃| 色婷婷六月亚洲婷婷丁香| 亚洲国产高清在线精品一区| 亚洲最大无码中文字幕| 亚洲AV无码一区二区大桥未久| 亚洲精品国产V片在线观看 | 亚洲日本va在线视频观看| 亚洲AV成人精品网站在线播放| 亚洲色偷偷偷网站色偷一区| 亚洲六月丁香婷婷综合|