李佳
Flink CDC是基于數(shù)據(jù)庫的日志CDC技術(shù),實現(xiàn)了全增量一體化讀取的數(shù)據(jù)集成框架。配合Flink優(yōu)秀的管道能力和豐富的上下游生態(tài),F(xiàn)link CDC可以高效實現(xiàn)海量數(shù)據(jù)的實時集成。
作為新一代的實時數(shù)據(jù)集成框架,F(xiàn)link CDC具有全增量一體化、無鎖讀取、并行讀取、表結(jié)構(gòu)變更自動同步、分布式架構(gòu)等技術(shù)優(yōu)勢,同時社區(qū)提供了完整的文檔支持。在Flink CDC開源的2年多時間里,社區(qū)成長迅速,目前Flink CDC社區(qū)已有76位貢獻者,7位Maintainer,社區(qū)釘釘用戶群超過7 800人。2.3版本共有49位社區(qū)貢獻者參與貢獻,累計解決126個issue,合并了133個PR,累計貢獻了170余個提交。從代碼分布上看,MySQL CDC,MongoDB CDC,Oracle CDC和增量快照框架(flink-cdc-base)模塊以及文檔模塊均為用戶帶來了很多特性和改進。Flink CDC 2.3版本帶來了諸多重要的改進和特性,這里挑選最重要的4個進行深入解讀。
Db2是IBM開發(fā)的關(guān)系型數(shù)據(jù)庫。Db2 CDC連接器可以捕獲Db2數(shù)據(jù)庫中表的行級變更,其實現(xiàn)原理是基于ASN Capture/Apply agents提供的SQL復(fù)制能力,將數(shù)據(jù)庫中開啟capture mode的表的變更存到指定的change table中。Db2 CDC連接器首先通過JDBC讀取表中的歷史數(shù)據(jù),再從change table中獲取增量變更數(shù)據(jù),從而實現(xiàn)全增量同步。
在Flink CDC 2.3版本中,MongoDB CDC連接器和Oracle CDC連接器都對接到了Flink CDC增量快照框架上,實現(xiàn)了增量快照算法,從而提供無鎖讀取、并行讀取和斷點續(xù)傳的功能。至此,F(xiàn)link CDC支持增量快照算法的數(shù)據(jù)源不斷擴大,在接下來的版本中,社區(qū)也在規(guī)劃讓更多的連接器對接到增量快照框架上。
作為社區(qū)最受用戶關(guān)注的MySQL CDC連接器,2.3版本中社區(qū)引入了諸多高級特性,極大地提升了性能和穩(wěn)定性,具體包括:
支持指定位點啟動
MySQL CDC連接器支持從指定的位點啟動作業(yè)??梢酝ㄟ^Timestamp、Binlog Offset或Binlog Gtid的方式指定作業(yè)啟動時的Binlog具體位置,還支持設(shè)置為Earliest-Offset從最早的Binlog位點啟動作業(yè)。
分片算法優(yōu)化
版本對全量階段分片算法進行優(yōu)化。將目前的同步分片改為異步進行,支持用戶指定主鍵中某一列作為分片的切分列,并且分片過程支持checkpoint,提升了全量讀取階段時因為同步分片阻塞導(dǎo)致的性能問題。
穩(wěn)定性提升
MySQL CDC連接器支持全部字符集對接到Flink SQL,解鎖更多用戶場景,支持寬容默認(rèn)值提升作業(yè)對不規(guī)范DDL的容忍度,支持自動獲取數(shù)據(jù)庫的時區(qū)從而解決時區(qū)問題。
性能提升
MySQL CDC重點優(yōu)化了內(nèi)存和讀取性能,通過JM里的meta復(fù)用和TM中流式讀取等改進降低了JM和TM的內(nèi)存使用;同時通過優(yōu)化Binlog解析邏輯提升了Binlog讀取性能。
其他改進
FlinkCDC 2.3版本兼容了Flink 1.13,1.14,1.15,1.16四個大版本,極大地降低用戶Connector的升級和運維成本。
OceanBaseCDC修復(fù)了時區(qū)問題,支持全類型對接到Flink SQL,并提供了更多的配置項,支持更靈活的配置。如新增加table-list配置項,支持訪問多張OceanBase數(shù)據(jù)表等。
MongoDBCDC支持了更多的數(shù)據(jù)類型,優(yōu)化了捕獲表的篩選過程。
TiDB CDC修復(fù)了全增量切換時數(shù)據(jù)丟失問題,支持讀取時region切換。
PostgresCDC支持geometry類型,開放了更多配置項,支持配置changelogmode來過濾發(fā)送的數(shù)據(jù)。
SqlServer CDC支持了更多的版本,并對文檔進行完善。
MySQL CDC和OceanBase CDC連接器提供了中文文檔,此外還對OceanBase CDC連接器提供了視頻教程。
Flink CDC開源社區(qū)的發(fā)展,得益于貢獻者們的無私貢獻和Maintainer成員的開源布道,更離不開廣大Flink CDC用戶群體的積極反饋和宣傳布道,F(xiàn)link CDC社區(qū)將會繼續(xù)做好開源社區(qū)建設(shè)。當(dāng)前Flink CDC社區(qū)正在做2.4版本的規(guī)劃,也歡迎所有用戶和貢獻者參與反饋,在接下來的2.4版本,社區(qū)主要方向計劃從下述4個方面展開:
數(shù)據(jù)源完善
支持更多的數(shù)據(jù)源,推動更多的CDC連接器接入增量快照框架,支持無鎖讀取、并發(fā)讀取、斷點續(xù)傳等特性。
性能提升
支持使用Batch模式同步全量階段數(shù)據(jù),提升全量階段性能;全量讀取階段結(jié)束后自動釋放空閑Reader資源等。
可觀測性提升
提供限流功能,以降低全量階段對數(shù)據(jù)庫產(chǎn)生的查詢壓力;提供更豐富的監(jiān)控指標(biāo),可以獲取到任務(wù)進度相關(guān)指標(biāo)監(jiān)控任務(wù)狀態(tài)。
易用性提升
提升連接器的易用性,比如簡化開箱即用的配置參數(shù),提供Datastream API程序示例等。