來源:https://ververica.github.io/flink-cdc-connectors/master/
01. Flink CDC 簡(jiǎn)介
Flink CDC [1] 是基于數(shù)據(jù)庫的日志 CDC 技術(shù),實(shí)現(xiàn)了全增量一體化讀取的數(shù)據(jù)集成框架。配合 Flink 優(yōu)秀的管道能力和豐富的上下游生態(tài),F(xiàn)link CDC 可以高效實(shí)現(xiàn)海量數(shù)據(jù)的實(shí)時(shí)集成。
具體關(guān)于Flink CDC是什么?可以看下這篇文字
作為新一代的實(shí)時(shí)數(shù)據(jù)集成框架,F(xiàn)link CDC 具有全增量一體化、無鎖讀取、并行讀取、表結(jié)構(gòu)變更自動(dòng)同步、分布式架構(gòu)等技術(shù)優(yōu)勢(shì),同時(shí)社區(qū)提供了完善的中英文文檔支持 [2]。
02. Flink CDC 2.4 概覽
在社區(qū)用戶和開發(fā)者們的共同努力下, Flink CDC 2.4 在端午假期后正式發(fā)布了:
https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.4.0
2.4 版本共有 32 位社區(qū)貢獻(xiàn)者參與貢獻(xiàn),計(jì)解決 141 個(gè) issue,合并了 86 個(gè)PR,貢獻(xiàn)了 96 個(gè) commits。從代碼分布上看,MySQL CDC, MongoDB CDC, PostgreSQL CDC,增量快照框架(flink-cdc-base)模塊以及文檔模塊均為用戶帶來了很多特性和改進(jìn)。
本文通過下圖帶你 10 分鐘快速了解 Flink CDC 2.4
版本的重大改進(jìn)和核心特性。
-
新增 Vitess CDC 連接器,支持 Vitess 增量數(shù)據(jù)同步。
-
PostgreSQL CDC
,SQL Server CDC
兩大連接器均接入了增量快照框架,從而提供了無鎖讀取,并發(fā)讀取和斷點(diǎn)續(xù)傳的能力。 -
2.4 版本升級(jí) Debezium 的依賴版本到 1.9.7.Final,引入了 Debezium 新版本的功能,優(yōu)化和修復(fù),比如:修復(fù)部分 DDL 無法解析的問題,修復(fù)解析 MySQL JSON 函數(shù)問題,Oracle 事件增加 scn 信息等。
-
增量快照框架在 2.4 版本增加了自動(dòng)關(guān)閉全量階段結(jié)束后的空閑 Reader 功能,該功能非常實(shí)用,可以在生產(chǎn)環(huán)境節(jié)省資源。
-
MySQL CDC 連接器在 2.4 版本支持讀取無主鍵表,同時(shí)支持新增表時(shí)原有實(shí)時(shí)同步鏈路不斷流。
-
社區(qū) 2.4 版本兼容
Flink 1.13 ~ 1.17
五個(gè) Flink 版本。CDC 的 SQL Connector 可以跑在不同的 Flink 集群上而無需任何修改,實(shí)現(xiàn)跨版本兼容。如果是 Datastream 作業(yè),則需要根據(jù)不同的 Flink 版本引入不同版本的 flink-shaded-guava 依賴,DataStream 用戶可以參考 SQL Connector 的打包方式管理正確的依賴。 -
MongoDB CDC 支持指定時(shí)間戳消費(fèi)數(shù)據(jù),支持 mongodb + srv 連接協(xié)議,并修復(fù)了若干問題,如:無法解析帶連字符的庫名,‘poll.await.time.ms’ 配置未生效,解析 DDL出現(xiàn)空指針等。
-
OceanBase CDC 連接器支持 JDBC 參數(shù)設(shè)置,支持指定 Oracle 驅(qū)動(dòng),完善對(duì) Oracle 數(shù)據(jù)類型的支持。
03. 詳解核心特性和重要改進(jìn)
3.1 深入解讀
Flink CDC 2.4 版本帶來了很多重要的改進(jìn)和特性,本文挑選最重要的五個(gè)進(jìn)行進(jìn)一步解讀。
1、新增 Vitess CDC 連接器
Vitess [3] 是一個(gè)用于部署,擴(kuò)展和管理大型 MySQL 實(shí)例集群的數(shù)據(jù)庫解決方案。
Vitess 的 VStream 是一個(gè)變更事件訂閱服務(wù),它能夠提供與來自 Vitess 集群底層 MySQL 分片的二進(jìn)制日志相同的信息。下游可以訂閱一個(gè) keyspace 的多個(gè)分片,很方便的實(shí)現(xiàn) Vitess 的下游 CDC 處理工具。Vitess CDC 連接器利用 VStream 獲取數(shù)據(jù)變更消息并發(fā)送,目前只支持讀取增量階段的變更同步,相當(dāng)于僅支持 latest 的啟動(dòng)模式。
Vitess CDC 連接器的支持背后還有個(gè)小故事,該 Connector 是來自 Vinted 的 Simonas Gelazevicius 開發(fā),秉持 upstream first 的開源貢獻(xiàn)精神,這位貢獻(xiàn)者從 2.0 版本就請(qǐng)求社區(qū)合并。但是這個(gè)數(shù)據(jù)源國內(nèi)用戶非常少,各個(gè)Maintainer 都不熟悉其技術(shù)細(xì)節(jié),所以一直沒能合并到社區(qū)主干分支。Simonas Gelazevicius 在 Flink CDC 社區(qū)每發(fā)布一個(gè)版本后都會(huì)主動(dòng) rebase PR, 這股堅(jiān)持打動(dòng)了社區(qū)全體 Maintainer 成員,社區(qū) Maintainer 任慶盛和方盛凱主動(dòng)學(xué)習(xí) Vitess 相關(guān)技術(shù),幫助 review 并改進(jìn) PR。最終該連接器由貢獻(xiàn)者Simonas Gelazevicius, Gintarasm ,方盛凱和任慶盛共同完成。
2、PostgreSQL CDC 和 SQL Server CDC連接器接入增量快照框架
2.4 版本中,PostgreSQL CDC 連接器和 SQL Server CDC 連接器都對(duì)接到了 Flink CDC 增量快照框架上,實(shí)現(xiàn)了增量快照算法,從而提供無鎖讀取,并行讀取和斷點(diǎn)續(xù)傳的功能。
3、PostgreSQL CDC 連接器支持增量快照原理
PostgreSQL CDC 連接器需要結(jié)合 logical decoding [4] 功能讀取 PostgreSQL 事務(wù)日志中的變更數(shù)據(jù),這需要啟動(dòng)一個(gè)在整個(gè)集群中唯一的 Replication Slot,并在 output plugin [5] 的幫助下處理這些變更,通過記錄讀取到的 WAL 位點(diǎn)來實(shí)現(xiàn)增量階段的切換和故障恢復(fù)。
增量快照框架除了在增量階段需要讀取變更數(shù)據(jù),在全量階段對(duì)每個(gè) SnapshotSplit 也需要啟動(dòng) Backfill Task 同步做快照時(shí)發(fā)生的變更。為了避免 Replication Slot 出現(xiàn)沖突,PostgreSQL CDC 連接器采用以下方法建立 Slot。首先 ‘slot.name’ 配置項(xiàng)為必填,需要用戶指定,這里指定的 slot name 會(huì)用在增量階段啟動(dòng)的 Slot,并且這個(gè) Slot 在作業(yè)啟動(dòng)時(shí)就會(huì)創(chuàng)建,在作業(yè)停止后也不會(huì)刪除,以此來保證增量階段讀到啟動(dòng)后完整的變更數(shù)據(jù),并可以從 Checkpoint 重啟。對(duì)于全量階段每個(gè) Backfill Task 的 Slot,會(huì)使用“slotname_subTaskId”的命名風(fēng)格,為了避免沖突和浪費(fèi) Slot 資源,這些 Slot 將會(huì)在全量讀取停止后刪除。
4、SQL Server CDC連接器支持增量快照原理
SQL Server CDC 連接器通過變更數(shù)據(jù)捕獲功能 [6] 讀取指定數(shù)據(jù)庫和表的變更數(shù)據(jù),并存到專門建立的 change table 中。這需要對(duì)指定的數(shù)據(jù)庫和表開啟 CDC 功能,來獲取行級(jí)別的變更。通過記錄數(shù)據(jù)庫日志的 LSN (Log Sequence Number),來實(shí)現(xiàn)增量階段的切換和故障恢復(fù)。
至此,F(xiàn)link CDC 支持增量快照算法的數(shù)據(jù)源不斷擴(kuò)大,在接下來的版本中,社區(qū)也在規(guī)劃讓更多的連接器對(duì)接到增量快照框架上。
5、增量快照框架支持自動(dòng)釋放資源
Flink CDC 的增量快照框架有兩個(gè)主要階段:全量階段和增量階段。這兩個(gè)階段的并行度并不相同,全量階段支持多并行度,加快大量數(shù)據(jù)的同步過程,增量階段讀取變更日志,需要使用單并發(fā)保證事件的順序和正確性。在全量階段讀取結(jié)束后,由于增量階段只需要一個(gè)并發(fā),會(huì)出現(xiàn)大量的空閑 Reader,比較浪費(fèi)資源。2.4 版本使用增量快照連接器時(shí),支持配置打開自動(dòng)關(guān)閉空閑 Reader 的功能來關(guān)閉這些空閑 Reader。由于這個(gè)功能依賴于 Flink 1.14 之后支持的 Checkpoint on finished Task 特性,所以只支持在 Flink 1.14 或更新的 Flink 版本上使用。
6、MySQL CDC 連接器功能更新
作為社區(qū)最受用戶關(guān)注的 MySQL CDC 連接器,2.4 版本中社區(qū)引入了一些高級(jí)特性,具體包括:
-
支持無主鍵表
MySQL CDC 連接器 2.4 版本支持使用無主鍵表,相比于有有主鍵的 MySQL 表,無主鍵表存在一些使用上需要額外注意的事項(xiàng)。無主鍵表使用時(shí)需要通過 ‘scan.incremental.snapshot.chunk.key-column’ 配置指定一列作為分片列,用于將表分為多個(gè)分片進(jìn)行同步,建議選擇有索引的列作為分片列,使用無索引的列將會(huì)導(dǎo)致全量階段多并發(fā)同步時(shí)使用表鎖。其次,選擇的分片列需要保證不存在數(shù)據(jù)的更新操作(比如從 1 更新到 2),如果存在更新操作,則只能保證 At-Least-Once 語義。
-
支持新增表實(shí)時(shí)不斷流
MySQL CDC 之前在處理新增表時(shí),原有的實(shí)時(shí)同步鏈路會(huì)發(fā)生斷流現(xiàn)象,需要等待新增加表的全量讀取結(jié)束后,才會(huì)繼續(xù)進(jìn)行同步,會(huì)對(duì)延遲敏感的用戶造成較大影響。例如,新增加的表歷史數(shù)據(jù)比較多,完成新增表的全量同步需要花費(fèi) 30 分鐘,那么對(duì)于已經(jīng)處于增量階段的表,將需要等待 30 分鐘后才可以繼續(xù)同步屬于該表的增量數(shù)據(jù)。2.4 版本對(duì)新增表的處理邏輯進(jìn)行進(jìn)一步優(yōu)化,確保新增加的表的全量階段不會(huì)影響已有的實(shí)時(shí)同步鏈路,極大地提升了用戶體驗(yàn)。
-
問題修復(fù)
2.4 版本中,MySQL CDC 連接器對(duì)社區(qū)用戶反饋的使用問題進(jìn)行了修復(fù),如指定 Binlog 位點(diǎn)消費(fèi)無法從 savepoint 啟動(dòng),數(shù)據(jù)庫存在特殊字符無法處理,大小寫敏感導(dǎo)致的分片錯(cuò)誤問題等。
3.2 其他改進(jìn)
Debezium 版本依賴升級(jí)到 1.9.7.Final 版本,引入對(duì)應(yīng) Debezium 版本的新功能和修復(fù)。
Flink CDC 2.4 版本兼容了 Flink 1.13 ~ 1.17 五個(gè)大版本,極大地降低用戶 Connector 的升級(jí)和運(yùn)維成本。
OceanBase CDC 連接器支持 JDBC 參數(shù)設(shè)置,支持指定驅(qū)動(dòng),完善對(duì) Oracle 數(shù)據(jù)類型的支持,同時(shí)修復(fù)了異常重連總是失敗等問題。
MongoDB CDC 支持指定時(shí)間戳消費(fèi)數(shù)據(jù),支持 mongodb + srv 連接協(xié)議,并修復(fù)如無法解析帶連字符的庫名,‘poll.await.time.ms’ 配置未生效,解析 DDL 出現(xiàn)空指針等問題。
Oracle CDC 修復(fù)了全量階段存在的數(shù)據(jù)正確性問題。
所有 CDC 連接器支持打印配置信息,便于排查問題。
04. 未來規(guī)劃
Flink CDC 開源社區(qū)的發(fā)展,得益于全體貢獻(xiàn)者的無私貢獻(xiàn)和 Maintainer 成員出色的社區(qū)工作,更離不開廣大 Flink CDC 用戶群體的積極使用和反饋報(bào)錯(cuò)。Flink CDC 社區(qū)將會(huì)堅(jiān)持做好開源社區(qū)的建設(shè), 當(dāng)前社區(qū)正在規(guī)劃 2.5 版本[7], 歡迎貢獻(xiàn)者和用戶積極反饋,在接下來的版本,社區(qū)主要方向會(huì)圍繞下述四個(gè)方面展開:
-
豐富數(shù)據(jù)源
支持更多的數(shù)據(jù)源,并推動(dòng)增量快照框架在各個(gè) CDC 連接器的使用,讓更多的數(shù)據(jù)源支持無鎖讀取、并發(fā)讀取、斷點(diǎn)續(xù)傳等特性。
-
優(yōu)化增量快照框架
對(duì)增量快照框架接入中遇到的問題進(jìn)行優(yōu)化,各個(gè) CDC 連接器在增量快照框架可重用的代碼進(jìn)行提取整理。
-
完善限流與監(jiān)控
提供限流功能,以降低全量階段對(duì)數(shù)據(jù)庫產(chǎn)生的查詢壓力。提供更豐富的監(jiān)控指標(biāo),可以獲取到任務(wù)進(jìn)度相關(guān)指標(biāo)監(jiān)控任務(wù)狀態(tài)。
-
更豐富的使用方式
支持 At least once 語義,支持 Snapshot only 的啟動(dòng)模式等,可以為使用者提供更多的場(chǎng)景應(yīng)用。
-
收斂支持的 Flink 版本
隨著 Flink 版本逐漸增多,CDC 為兼容多個(gè)Flink版本的維護(hù)壓力也逐漸增加。參考目前 Flink 連接器的規(guī)則[8],在后續(xù)版本中,CDC 連接器將會(huì)考慮僅支持 Flink 最新的 3-4 個(gè)版本。
[1] https://github.com/ververica/flink-cdc-connectors
[2] https://ververica.github.io/flink-cdc-connectors
[3] https://vitess.io/
[4] https://www.postgresql.org/docs/current/logicaldecoding-explanation.html
[5] https://www.postgresql.org/docs/current/logicaldecoding-output-plugin.html
[6] https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-2017
[7] https://github.com/ververica/flink-cdc-connectors/issues/2239文章來源:http://www.zghlxwxcb.cn/news/detail-517747.html
[8] https://cwiki.apache.org/confluence/display/FLINK/Externalized+Connector+development#ExternalizedConnectordevelopment-Flinkcompatibility文章來源地址http://www.zghlxwxcb.cn/news/detail-517747.html
到了這里,關(guān)于Flink CDC 2.4 正式發(fā)布,5分鐘了解CDC 2.4新內(nèi)容,新增 Vitess 數(shù)據(jù)源,更多連接器支持增量快照,升級(jí) Debezium 版本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!