Flink CDC 3.0 耍起來到底怎麼樣?
來源:安瑞哥是碼農
這不前不久 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 支援 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
解壓之後,得到這樣式的一個檔案佈局:
整個結構主打的是一個“輕奢簡潔風”。
bin 目錄:裡面就一個指令碼,所有資料匯入的功能全仰仗它;
conf:除開一個日誌的配置檔案外,其他的,就是根據你的資料匯入要求,配置的一個個從資料來源到資料目的地的詳細說明;
lib:最開始也只有一個 CDC 的基礎 jar 包,後面根據你的匯入需要,再新增各個資料source,以及資料sink的 pipeline connector jar 包;
log:記錄 CDC 程式匯入過程中的詳細過程日誌。
觀察完了整個目錄結構之後,接下來,就要告訴這個 CDC 軟體,你的 Flink home 擱哪呢,否則你的程式一啟動,就會丟擲下面的異常:
這裡會提示你需要設定「Flink Home」的環境變數,在哪設定呢?
你可以設定全域性的,也可以只針對專門的使用者,設定區域性的,我這裡因為只需要針對 flink 這個使用者,所以,只需要修改 flink 這個使用者下的概要檔案(vi /home/flink/.bash_profile)就可以了:
根據它的要求,新增「Flink Home」變數,至於剩下的3個變數,那是之前針對 Flink 環境時新增的,不用動。
PS:修改完之後,記得用 source 命令讓它生效哦。
接下來,因為CDC程式需要對接的資料來源,跟資料目的地分別是MySQL 跟 Doris,所以需要下載對應的 pipeline connector 到上面的那個 lib 目錄下(具體下載地址去官網找):
基礎環境準備好了,接下來,我們正式開耍。
2. 跑起來
最新版本 CDC 的一個特點之一,就是根據配置檔案來執行資料的匯入任務,所以,我們接下來的一步,就是配置資料來源(Source),跟資料目的地(Sink)。
配置檔案內容如下:
這裡面有個特別注意的地方,就是這個時區的設定,官網給的 demo 中用的UTC:
我猜寫這個文件人,要麼就是沒有實際跑過,要麼就是他不是我們中國人,否則程式會因為跟MySQL 服務端的時區設定不一致報錯滴:
既然這樣,那我們給時區設定改過來就好了,但你以為這樣就完事了嗎?
真正的坑,其實是在後面等著你呢。
2.1 坑1:不能直接用 on yarn 模式
從官網提供的說明案例來看,人家是從頭開始 build 了一套全新的Flink standalone 環境的,然後很自然的用下面這個提交命令,就跑起來了(提交到 standalone 環境了)。
bin/flink-cdc.sh conf/mysql2doris.yml
可對於我來說,我們沒有 Flink standalone 環境啊,我只有 yarn,是不是就不配了呢?
好像還真是。
對於這個最新版本的 CDC 如何在 yarn 上面執行,我研究了好久,但無果。
一來它官網沒有說明怎麼設定(我沒找到);二來我在它目前提供的指令碼程式,以及配置檔案裡都沒有找到相關配置。
咋整?我抱著執行上面這個命令試試看的心理,結果,不出意外,就出意外了:
從異常提示來看,顯然它要找的這個8081埠就是 standalone 模式下的 http 埠,但我們,沒有。
果然是不配!
那既然暫時不能透過 on yarn 以叢集方式執行,還有別的招不?
有,本地模式!
矬是矬了點,但好歹能跑起來不是嗎?就知足吧!
但是...
2.2 坑2:跟Flink 1.15 不相容
我是怎麼知道的呢?
上面不是說執行方式改成了本地模式嘛,那麼執行命令就變成了這樣:
bin/flink-cdc.sh conf/mysql2doris.yml --use-mini-cluster
結果一啟動,就給我拋了這個異常:
面對這個錯,我是橫看豎看、上看下看,研究了半天,最後猜測,大概可能也許是跟當前 Flink 版本(1.15)不相容導致的。
於是,我果斷下載了最新版本的 Flink(1.18),一頓猛如虎的操作之後,我把剛才對 Flink home 的設定改成了下面這樣:
修改完,還是別忘記 source 一下讓它即時生效。
果不其然,升級完 Flink 之後,剛才那個錯誤就不見了,所以再次證明,官網提供的資訊(Flink 1.15 跟 Flink CDC 3.0 的相容性),有時候不一定就是對的,你得有自己的懷疑跟判斷。
2.3 注意點3:需要提前建庫名
這個雖然算不上什麼坑,但我覺得還是需要你注意。
那就是,根據官網提供的案例,我們也準備將MySQL(8.0)其中一個庫(test庫)的所有表,給同步到 Doris (不做表名對映)。
但是我忘記提前給 Doris 建立相同的資料庫名了,也就是在 Doris 裡,沒有 test 這個庫。
於是,在CDC程式啟動的時候,就會丟擲下面的異常:
解決辦法就是,把它找不到的這個 test 庫名給建起來。
2.4 正常執行時的亞子
一切故障掃清之後,再次啟動 CDC 匯入程式,就如下圖看到的這樣:
表面看,它是卡在這裡一動不動,但實際上,它的後臺則在暗流湧動。
開啟它的日誌,可以清楚的看到它在不間斷的滾動,證明程式是在幹活的。
這下可以放心了。
3. 檢視結果,嚇你一跳
由於程式正常啟動了,所以資料同步就應該不是問題,很快這個庫下面的6張表就同步了過來。
檢查之後發現,資料同步的表數量,以及每張錶的歷史記錄條量,都能保持一致,並且,資料同步的表結構和欄位型別,也能根據各自的對映規範,保持一致。
拿其中一張表 test02 來舉個例子:
MySQL的原始記錄數
同步到Doris之後的記錄數
但是,當我往源 MySQL 表的 test02 再次寫入幾條記錄之後,你猜怎麼著?
Doris這邊對應表的記錄數量,居然絲毫沒有變化:
MySQL再次寫入4條記錄之後
Doris對應表的記錄數沒有增加
關鍵看它的日誌輸出,也沒有絲毫動靜(沒有感知到資料變化,當然,程式肯定沒掛):
要知道,同樣就是這個庫,我之前測試過 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flink CDC3.0的介紹
- flink-cdc3.0官方網站網站
- FLINK CDC同步
- [Flink/CDC/資料整合] 資料增量整合方案:Flink CDC
- FLINK CDC部署同步
- Flink CDC實戰
- Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生產實踐MongoDB
- Flink MongoDB CDC 在 XTransfer 的生產實踐|Flink CDC 專題MongoDB
- Flink的mysql CDC,好使不?MySql
- Flink CDC Meetup · Online,5.21 開講!
- flink-cdc實時同步(oracle to mysql)OracleMySql
- Flink CDC 在京東的探索與實踐
- 回顧|Flink CDC Meetup(附 PPT 下載)
- 偵錯程式到底怎樣工作
- 都說Kubernetes是未來,那未來到底是什麼樣子?
- Flink Shuffle 3.0: Vision, Roadmap and Progress
- Flink CDC 在易車的應用實踐
- Flink CDC+Kafka 加速業務實時化Kafka
- 基於 Flink CDC 的實時同步系統
- Flink CDC 在大健雲倉的實踐
- Apache Flink CDC 批流融合技術原理分析Apache
- 關於大資料到底是怎麼來的大資料
- 預計2019年釋出的Vue3.0到底有什麼不一樣的地方?Vue
- 本地生活服務商到底怎麼樣呢,值得入局嗎?
- 「以撒」世界觀衍生作品《損友傳奇》到底怎麼樣
- 所以,《彩虹六號:圍攻》到底需要怎麼樣的測試服?
- 基於 Flink CDC 的現代資料棧實踐
- Flink CDC MongoDB Connector 的實現原理和使用實踐MongoDB
- Python未來的發展趨勢怎麼樣?Python
- Java怎麼樣?學完後前途怎麼樣?Java
- 到底什麼樣的 REST 才是最佳 REST?REST
- 弱結構化日誌 Flink SQL 怎麼寫?SLS SPL 來幫忙SQL
- 想知道HBC到底怎麼回事兒?來看這個視訊吧!
- 智慧數字經營3.0透露怎樣的趨勢?
- RabbitMQ和Kafka到底怎麼選?MQKafka
- 不懂就問,Milvus 新上線的資源組功能到底怎麼樣?
- 銀行科技到底怎麼樣?我曾經的四年告訴你 !
- SQLSERVER 的 nolock 到底是怎樣的無鎖?SQLServer