Flink CDC 3.0 耍起來到底怎麼樣?

大資料技術前線發表於2024-01-04

來源:安瑞哥是碼農

這不前不久 Flink 官方發出喜訊,說Flink CDC 3.0 release 了,從官方介紹來看,相較以往的版本有比較大的改變。


這一下就引起了我想體驗一把的興趣,從之前我測試過的Flink CDC 案例來看,感覺還不錯,不知道最新的版本,又做出了哪些升級跟最佳化。


從 Flink 官方公眾號釋出的內容來看,Flink CDC 3.0 的主要特徵變化有如下3點:


1. 軟體架構變了,由原來只是 Flink 程式碼開發過程中,對資料來源的接入部分編碼,改為獨立於 Flink 程式碼開發之外的,單獨的資料接入工具(軟體),類似 sqoop、dataX 的玩法(但依然要依賴基礎的 Flink 環境);


2. 資料接入方式的改變,之前 Flink CDC 接入資料,依靠的是在 Flink 程式中,透過編碼的方式來指定資料來源(Source),以及資料目的地(Sink),現在改為透過配置檔案配置的方式就能實現;


3. 透過資料來源(資料目的地)連線外掛(jar包),也叫pipeline connector 方式,可插拔式新增需要的資料來源(Source),和資料目的地(Sink),跟 DataX 的玩法一樣。


還是老規矩,雖然說新版本做了這麼多的改變,那到底用起來如何?我們拭目以待。



0. 先讀官網


雖然3.0之前的版本我們已經通讀過一遍官網了,但畢竟新版本跟之前的比,做了較大的改變,所以還是得再看一眼,怎麼樣才能把它給順利耍起來。


老規矩,先看相容性,因為即便新版本的CDC在架構上,跟原來的 Flink 做了分離,但是在使用時,還是要依賴基礎的 Flink 環境。


Flink CDC 3.0 耍起來到底怎麼樣?


從這個表格來看,新版本的Flink CDC 支援 Flink 1.14 及以上版本(但從我的實際驗證來看不是的)。


而我當前的 Flink 是1.15的版本,意味著我不需要做任何額外的調整就可以玩起來了。


事先要說明的是:官網目前針對 Flink CDC 3.0 的 demo 演示,是基於 Flink 1.18 的 standalone 模式展開的,但我們為了更貼合專案實際環境,跟它玩的方式會有些不一樣,因為我沒有 standalone 環境


接下來,我們以 Flink CDC 3.0 (配合 Flink 1.15) 同步 MySQL8 整庫到 Doris 2.0.3 為例展開說明



1. 環境準備


Flink 是匹配的環境,那麼現在就只需要下載最新版本的 Flink CDC 安裝包。


下載地址:。


可以直接在你的 Linux 命令列介面,用 wget 下載到你的目標目錄下:


wget 


解壓之後,得到這樣式的一個檔案佈局:


Flink CDC 3.0 耍起來到底怎麼樣?


整個結構主打的是一個“輕奢簡潔風”。


bin 目錄:裡面就一個指令碼,所有資料匯入的功能全仰仗它;


conf:除開一個日誌的配置檔案外,其他的,就是根據你的資料匯入要求,配置的一個個從資料來源到資料目的地的詳細說明;


lib:最開始也只有一個 CDC 的基礎 jar 包,後面根據你的匯入需要,再新增各個資料source,以及資料sink的 pipeline connector jar 包;


log:記錄 CDC 程式匯入過程中的詳細過程日誌。


觀察完了整個目錄結構之後,接下來,就要告訴這個 CDC 軟體,你的 Flink home 擱哪呢,否則你的程式一啟動,就會丟擲下面的異常:


Flink CDC 3.0 耍起來到底怎麼樣?


這裡會提示你需要設定「Flink Home」的環境變數,在哪設定呢?


你可以設定全域性的,也可以只針對專門的使用者,設定區域性的,我這裡因為只需要針對 flink 這個使用者,所以,只需要修改 flink 這個使用者下的概要檔案(vi /home/flink/.bash_profile)就可以了:


Flink CDC 3.0 耍起來到底怎麼樣?


根據它的要求,新增「Flink Home」變數,至於剩下的3個變數,那是之前針對 Flink 環境時新增的,不用動。


PS:修改完之後,記得用 source 命令讓它生效哦。


接下來,因為CDC程式需要對接的資料來源,跟資料目的地分別是MySQL 跟 Doris,所以需要下載對應的 pipeline connector 到上面的那個 lib 目錄下(具體下載地址去官網找):


Flink CDC 3.0 耍起來到底怎麼樣?


基礎環境準備好了,接下來,我們正式開耍。



2. 跑起來


最新版本 CDC 的一個特點之一,就是根據配置檔案來執行資料的匯入任務,所以,我們接下來的一步,就是配置資料來源(Source),跟資料目的地(Sink)。


配置檔案內容如下:


Flink CDC 3.0 耍起來到底怎麼樣?

這裡面有個特別注意的地方,就是這個時區的設定,官網給的 demo 中用的UTC:


Flink CDC 3.0 耍起來到底怎麼樣?

我猜寫這個文件人,要麼就是沒有實際跑過,要麼就是他不是我們中國人,否則程式會因為跟MySQL 服務端的時區設定不一致報錯滴:


Flink CDC 3.0 耍起來到底怎麼樣?


既然這樣,那我們給時區設定改過來就好了,但你以為這樣就完事了嗎?


真正的坑,其實是在後面等著你呢。


2.1 坑1:不能直接用 on yarn 模式


從官網提供的說明案例來看,人家是從頭開始 build 了一套全新的Flink standalone 環境的,然後很自然的用下面這個提交命令,就跑起來了(提交到 standalone 環境了)。


bin/flink-cdc.sh conf/mysql2doris.yml

可對於我來說,我們沒有 Flink standalone 環境啊,我只有 yarn,是不是就不配了呢?


好像還真是。


對於這個最新版本的 CDC 如何在 yarn 上面執行,我研究了好久,但無果。


一來它官網沒有說明怎麼設定(我沒找到);二來我在它目前提供的指令碼程式,以及配置檔案裡都沒有找到相關配置


咋整?我抱著執行上面這個命令試試看的心理,結果,不出意外,就出意外了:


Flink CDC 3.0 耍起來到底怎麼樣?

從異常提示來看,顯然它要找的這個8081埠就是 standalone 模式下的 http 埠,但我們,沒有。


果然是不配!


那既然暫時不能透過 on yarn 以叢集方式執行,還有別的招不?


有,本地模式!


矬是矬了點,但好歹能跑起來不是嗎?就知足吧!


但是...


2.2 坑2:跟Flink 1.15 不相容


 我是怎麼知道的呢?


上面不是說執行方式改成了本地模式嘛,那麼執行命令就變成了這樣:


bin/flink-cdc.sh conf/mysql2doris.yml --use-mini-cluster

結果一啟動,就給我拋了這個異常:


Flink CDC 3.0 耍起來到底怎麼樣?


面對這個錯,我是橫看豎看、上看下看,研究了半天,最後猜測,大概可能也許是跟當前 Flink 版本(1.15)不相容導致的。


於是,我果斷下載了最新版本的 Flink(1.18),一頓猛如虎的操作之後,我把剛才對 Flink home 的設定改成了下面這樣:


Flink CDC 3.0 耍起來到底怎麼樣?

修改完,還是別忘記 source 一下讓它即時生效。


果不其然,升級完 Flink 之後,剛才那個錯誤就不見了,所以再次證明,官網提供的資訊(Flink 1.15 跟 Flink CDC 3.0 的相容性),有時候不一定就是對的,你得有自己的懷疑跟判斷。



2.3 注意點3:需要提前建庫名


這個雖然算不上什麼坑,但我覺得還是需要你注意。


那就是,根據官網提供的案例,我們也準備將MySQL(8.0)其中一個庫(test庫)的所有表,給同步到 Doris (不做表名對映)。


但是我忘記提前給 Doris 建立相同的資料庫名了,也就是在 Doris 裡,沒有 test 這個庫。


於是,在CDC程式啟動的時候,就會丟擲下面的異常:


Flink CDC 3.0 耍起來到底怎麼樣?


解決辦法就是,把它找不到的這個 test 庫名給建起來。



2.4 正常執行時的亞子


一切故障掃清之後,再次啟動 CDC 匯入程式,就如下圖看到的這樣:


Flink CDC 3.0 耍起來到底怎麼樣?

 

表面看,它是卡在這裡一動不動,但實際上,它的後臺則在暗流湧動。


開啟它的日誌,可以清楚的看到它在不間斷的滾動,證明程式是在幹活的。


Flink CDC 3.0 耍起來到底怎麼樣?

這下可以放心了。



3. 檢視結果,嚇你一跳


由於程式正常啟動了,所以資料同步就應該不是問題,很快這個庫下面的6張表就同步了過來。


Flink CDC 3.0 耍起來到底怎麼樣?


檢查之後發現,資料同步的表數量,以及每張錶的歷史記錄條,都能保持一致,並且,資料同步的表結構和欄位型別,也能根據各自的對映規範保持一致。


拿其中一張表 test02 來舉個例子:


Flink CDC 3.0 耍起來到底怎麼樣?

MySQL的原始記錄數


Flink CDC 3.0 耍起來到底怎麼樣?

同步到Doris之後的記錄數


但是,當我往源 MySQL 表的 test02 再次寫入幾條記錄之後,你猜怎麼著?


Doris這邊對應表的記錄數量,居然絲毫沒有變化


Flink CDC 3.0 耍起來到底怎麼樣?

MySQL再次寫入4條記錄之後

Flink CDC 3.0 耍起來到底怎麼樣?

Doris對應表的記錄數沒有增加

關鍵看它的日誌輸出,也沒有絲毫動靜(沒有感知到資料變化,當然,程式肯定沒掛):


Flink CDC 3.0 耍起來到底怎麼樣?

要知道,同樣就是這個庫,我之前測試過 Flink CDC 2.x版本的時候(也是同步到 Doris),可沒有這個問題


隨後,我又嘗試在 MySQL 這邊新建一張表 test07,同樣,Doris 依然感知不到


這坑爹的玩意!莫非是有哪個神秘的配置被我漏了嗎?


算了,不再繼續試錯了,測試結果已然低於預期,不滿意!



最後


雖說最新的 Flink CDC 3.0 做了很多方面的改變,我們就是說,你要是往著好用,且能保住基本功能的同時做出的改變,那還行。


但你要是改著改著,雖然在編碼上免去了使用者的工作量(用配置檔案代替),但在功能上卻還不如之前的老版本,個人認為會比較遺憾。


從這次測試來看,用新版本 Flink CDC 3.0 同步 MySQL8 整庫到 Doris2.0.3,不能使用 on yarn的方式,且只有歷史資料部分能同步成功,至於資料的增量修改部分,暫時不行


希望以上提到的不足,能很快得到解決,否則,升級的意義在哪?

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027827/viewspace-3002591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章