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