一、Flink CDC 概述
Flink CDC 是基于數(shù)據(jù)庫日志 CDC(Change Data Capture)技術的實時數(shù)據(jù)集成框架,支持了全增量一體化、無鎖讀取、并行讀取、表結構變更自動同步、分布式架構等高級特性。配合 Flink 優(yōu)秀的管道能力和豐富的上下游生態(tài),F(xiàn)link CDC 可以高效實現(xiàn)海量數(shù)據(jù)的實時集成。Flink CDC 社區(qū)發(fā)展迅速,在開源的三年時間里,社區(qū)已經吸引了 111 位貢獻者,培養(yǎng)了 8 位 Maintainer,社區(qū)釘釘用戶群超過 9800 人。
在社區(qū)用戶與開發(fā)者的共同努力下,F(xiàn)link CDC 于 2023 年 12 月 7 日重磅推出了其全新的?3.0 版本?,3.0 版本的發(fā)布對 Flink CDC 而言具有里程碑式的意義,自此 Flink CDC 從捕獲數(shù)據(jù)變更的 Flink 數(shù)據(jù)源正式邁向為以 Flink 為基礎的端到端流式 ELT 數(shù)據(jù)集成框架。在該版本中,社區(qū)首先支持實時同步 MySQL 數(shù)據(jù)至?Apache Doris?和?StarRocks?兩條鏈路。
二、Flink CDC 3.0 設計動機
2.1 Flink CDC 與數(shù)據(jù)同步面臨的挑戰(zhàn)
雖然 Flink CDC 有很多技術優(yōu)勢,社區(qū)用戶增長很快,但隨著 Flink CDC 項目用戶基數(shù)的日益增長,以及應用場景的不斷擴大,社區(qū)收到了很多用戶反饋:
- 用戶體驗:只提供 Flink source,不支持端到端數(shù)據(jù)集成, SQL 和 DS API 構建作業(yè)流程復雜
- 維護頻繁:上游數(shù)據(jù)庫表結構變更非常常見 ,增加、刪除表的業(yè)務需求普遍存在
- 擴展性:全量和增量階段資源難以靈活擴縮容 ,千表同步、萬表入湖入倉資源消耗大
- 中立性:項目使用 Apache License V2 協(xié)議,不屬于 Apache Flink ,版權歸屬于 Alibaba (Ververica)
針對這些反饋,社區(qū)的 Maintainer 也在思考在 Flink CDC 的不足,思考 CDC 乃至數(shù)據(jù)集成領域面臨的技術挑戰(zhàn):
- 歷史數(shù)據(jù)規(guī)模大:數(shù)據(jù)庫的歷史數(shù)據(jù)規(guī)模大,100T+ 規(guī)模很常見
- 增量數(shù)據(jù)實時性要求高:數(shù)據(jù)庫的增量數(shù)據(jù)業(yè)務價值高,且價值隨時間遞減,需要實時處理
- 數(shù)據(jù)的保序性:CDC 數(shù)據(jù)的加工結果通常需要強一致性語義,需要處理工具支持全局保序
- 表結構動態(tài)變化:增量數(shù)據(jù)隨時間增長,數(shù)據(jù)對應的表結構會不斷演進
在梳理這些問題時,我們也在思考,能否在 Flink CDC 項目中幫助用戶解決這些技術挑戰(zhàn)?能否為用戶打磨一款面向 CDC 和海量數(shù)據(jù)集成的開源產品?
2.2 Flink CDC 3.0 定位
針對這些想法,我們在 Flink CDC 社區(qū)里面與 Maintainer 一起展開了多輪討論和設計。最終,面向數(shù)據(jù)集成用戶、面向端到端實時數(shù)據(jù)集成的框架 Flink CDC 3.0 應運而生。在產品設計上我們追求簡潔,秉持以下原則和目標進行設計:
- 端到端體驗:Flink CDC 3.0 定位為端到端的數(shù)據(jù)集成框架,API 設計直接面向數(shù)據(jù)集成場景,幫助用戶輕松構建同步作業(yè)
- 自動化:上游 schema 變更自動同步到下游,已有作業(yè)支持動態(tài)加表
- 極致擴展:空閑資源自動回收,一個 sink 實例支持寫入多表
- 推動捐贈:推動 Flink CDC 成為 Apache Flink 的子項目,版權屬于中立的 Apache 基金會,吸引更多的公司和開發(fā)者參與。
三、Flink CDC 3.0 整體設計
3.1 Flink CDC 3.0 架構
Flink CDC 3.0 的整體架構自頂而下分為 4 層:
- Flink CDC API:面向終端用戶的 API 層,用戶使用 YAML 格式配置數(shù)據(jù)同步流水線,使用 Flink CDC CLI 提交任務
- Flink CDC Connect:對接外部系統(tǒng)的連接器層,通過對 Flink 與現(xiàn)有 Flink CDC source 進行封裝實現(xiàn)對外部系統(tǒng)同步數(shù)據(jù)的讀取和寫入
- Flink CDC Composer:同步任務的構建層,將用戶的同步任務翻譯為 Flink DataStream 作業(yè)
- Flink CDC Runtime:運行時層,根據(jù)數(shù)據(jù)同步場景高度定制 Flink 算子,實現(xiàn) schema 變更、路由、變換等高級功能
3.2 面向數(shù)據(jù)集成用戶的 API 設計
Flink CDC 3.0 的用戶 API 設計專注于數(shù)據(jù)集成場景,用戶無需關注框架實現(xiàn),只需使用 YAML 格式描述數(shù)據(jù)來源與目標端即可快速構建一個數(shù)據(jù)同步任務。以從 MySQL 同步數(shù)據(jù)至 Apache Doris 為例:
3.3 Pipeline Connector API 設計
為了更好地將外部系統(tǒng)對接至 Flink CDC 3.0 的數(shù)據(jù)同步流水線,F(xiàn)link CDC 3.0 定義了 Pipeline Connector API:
- DataSource:Flink CDC 3.0 的數(shù)據(jù)源,由負責構建 Flink Source 的 EventSourceProvider 和提供元信息讀取能力的 MetadataAccessor 組成。DataSource 從外部系統(tǒng)中讀取變更事件 Event,并傳遞給下游算子。
- DataSink:Flink CDC 3.0 的數(shù)據(jù)目標端,由負責構建 Flink Sink 的 EventSinkProvider 和提供對目標端元信息修改能力的 MetadataApplier 構成。DataSink 將上游算子傳遞來的變更事件 Event 寫出至外部系統(tǒng),MetadataApplier 負責處理上游的 schema 變更信息并應用至外部系統(tǒng),實現(xiàn) schema 變更的實時處理。
為盡可能對接 Flink 現(xiàn)有的生態(tài)系統(tǒng),DataSource 和 DataSink 在設計上復用 Flink Source 和 Sink,開發(fā)者可以快速基于 Flink connector 對接 Flink CDC 3.0 框架,將外部系統(tǒng)高效地接入 Flink CDC 的上下游生態(tài)。在接下來的 Flink CDC 3.1 版本中,社區(qū)計劃對接 Paimon、Iceberg、Kafka、MongoDB 等外部系統(tǒng),從而進一步擴大 Flink CDC 的生態(tài)與使用場景。
3.4 Flink CDC 3.0 核心設計解析
為了實現(xiàn) schema 變更、整庫同步、分庫分表等用戶場景的高性能同步,得益于 Flink CDC 社區(qū)貢獻者對 Apache Flink 項目的深度理解(Flink CDC 項目核心貢獻者包含多名 Flink PMC 成員和 Flink Committer),F(xiàn)link CDC 3.0 不僅在實現(xiàn)上巧妙利用 Apache Flink 提供的各種能力,還通過定制化 Flink 算子等方式實現(xiàn)了各種同步模式的支持。
■ 3.4.1 Schema Evolution 設計
Schema 變更處理是上游數(shù)據(jù)庫中十分常見的用戶場景,也是數(shù)據(jù)同步框架實現(xiàn)的難點。針對該場景,F(xiàn)link CDC 3.0 在作業(yè)拓撲中引入了 SchemaRegistry,結合 SchemaOperator 協(xié)調并控制作業(yè)拓撲中的 schema 變更事件處理。
當上游數(shù)據(jù)源發(fā)生 schema 變更時,SchemaRegistry 會控制 SchemaOperator 以暫停數(shù)據(jù)流,并將流水線中的數(shù)據(jù)從 sink 全部刷出以保證 schema 一致性。當 schema 變更事件在外部系統(tǒng)處理成功后,SchemaOperator 恢復數(shù)據(jù)流,完成本次 schema 變更的處理。
■?3.4.2 整庫同步設計
用戶可以在 Flink CDC 3.0 的配置文件中指定 DataSource 同步任務捕獲上游多表或整庫變更,結合 Schema Evolution 的設計,SchemaRegistry 會在讀取到新表的數(shù)據(jù)后,自動在目標端外部系統(tǒng)建表,實現(xiàn)自動化的數(shù)據(jù)整庫同步。
■?3.4.3 分庫分表同步設計
在數(shù)據(jù)同步中,一個常見的使用場景是將上游由于業(yè)務或數(shù)據(jù)庫性能問題而拆分的多表在下游系統(tǒng)合并為一張表。Flink CDC 3.0 使用路由(Route)機制實現(xiàn)分庫分表合并的能力。用戶可以在配置文件中定義 route 規(guī)則使用正則表達式匹配多張上游表,并將其指向同一張目標表,實現(xiàn)分庫分表數(shù)據(jù)的歸并。
■?3.4.4 高性能數(shù)據(jù)結構設計
為了降低數(shù)據(jù)在 Flink 作業(yè)中流轉時產生的額外序列化開銷,F(xiàn)link CDC 3.0 設計了一套高性能數(shù)據(jù)結構:
- 變更數(shù)據(jù)與 Schema 信息的分離:在發(fā)送變更數(shù)據(jù)前,source 先發(fā)送 schema 信息對其進行描述并由框架追蹤,因此 schema 信息無需綁定在每條變更數(shù)據(jù)之上,大大降低了在寬表場景下 schema 信息的序列化成本。
- 二進制存儲格式:數(shù)據(jù)在同步過程中使用二進制存儲,并只在需要讀取某個字段的詳細數(shù)據(jù)時(如按主鍵進行分區(qū))再進行反序列化,進一步降低序列化成本。
正是這些核心設計使得 Flink CDC 具備了優(yōu)秀的端到端數(shù)據(jù)集成能力,為用戶提供了 schema evolution、整庫同步、分庫分表同步等開箱即用能力,高效的數(shù)據(jù)結構設計讓數(shù)據(jù)集成作業(yè)可以獲得更好的性能優(yōu)勢。
總體來說,F(xiàn)link CDC 3.0 不僅提供基礎的數(shù)據(jù)同步能力,schema 變更自動同步、整庫同步、分庫分表等增強功能使 Flink CDC 3.0 在更復雜的數(shù)據(jù)集成與用戶業(yè)務場景中發(fā)揮作用:用戶無需在數(shù)據(jù)源發(fā)生 schema 變更時手動介入,大大降低用戶的運維成本;只需對同步任務進行簡單配置即可將多表、多庫同步至下游,并進行合并等邏輯,顯著降低用戶的開發(fā)難度與入門門檻。
四、快速上手 Flink CDC 3.0
保持之前社區(qū)一貫的優(yōu)秀習慣,F(xiàn)link CDC 社區(qū)提供了詳細的用戶文檔,包括CDC 3.0 架構和核心概念介紹?,同時提供了?MySQL 同步至 Apache Doris?、MySQL 同步至 StarRocks?的快速上手教程幫助用戶快速體驗。社區(qū)也提供了 demo,用戶可以通過以下 demo 了解 Flink CDC 3.0 的極簡開發(fā)體驗:
【DEMO 視頻】
觀看鏈接:https://cloud.video.taobao.com/play/u/null/p/1/e/6/t/1/442904271204.mp4
五、致謝
感謝 Flink CDC 用戶對社區(qū)的反饋和信賴,特別感謝?Apache Doris?和?StarRocks?社區(qū)和開發(fā)者對 Flink CDC 3.0 版本的支持,由衷感謝為 Flink CDC 3.0 版本貢獻的每一位開發(fā)者,貢獻者列表如下(按字母排序):
BIN, Dian Qi, EchoLee5, FlechazoW, FocusComputing, Hang Ruan, He Wang, Hongshun Wang, Jiabao Sun, Josh Mahonin, Kunni, Leonard Xu, Maciej Bryński, Malcolmjian, North.Lin, Paddy Gu, PengFei Li, Qingsheng Ren, Shawn Huang, Simonas Gelazevicius, Sting, Tyrantlucifer, TJX2014, Xin Gong, baxinyu, chenlei677, e-mhui, empcl, gongzhongqiang, gaotingkai, ice, joyCurry30, l568288g, lvyanquan, pgm-rookie, rookiegao, skylines, syyfffy, van, wudi, wuzhenhua, yunqingmo, yuxiqian, zhaomin, zyi728, zhangjian文章來源:http://www.zghlxwxcb.cn/news/detail-765993.html
Flink CDC 項目由阿里巴巴旗下的 Ververica 公司使用 Apache License V2 協(xié)議開源,項目版權屬于 Ververica。目前阿里巴巴和 Flink CDC 社區(qū)已經發(fā)起了將 Flink CDC 項目捐贈給 Apache Flink 社區(qū)的討論?,捐贈完成之后,F(xiàn)link CDC 項目的版權將會屬于中立的 Apache 基金會, Flink CDC 也能與 Apache Flink 進行更深度的集成,在為用戶提供更好的實時數(shù)據(jù)集成體驗的同時擴展 Apache Flink 的社區(qū)生態(tài),感興趣的開發(fā)者可以關注 Flink 社區(qū)的討論郵件。文章來源地址http://www.zghlxwxcb.cn/news/detail-765993.html
到了這里,關于Flink CDC 3.0 正式發(fā)布,詳細解讀新一代實時數(shù)據(jù)集成框架的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!