Doris 的 一鍵 mysql 同步,靠譜不?
來源:安瑞哥是碼農
上篇文章寫了 Clickhouse 可以在不透過外部工具幫助的情況下,用建立mysql的外部庫方式,來同步開啟了binlog功能的整個mysql庫下的表,實現真正意義上的CDC(歷史資料+變化資料)同步。
那麼今天這篇文章,就來接著說說,對於Doris這款資料來說,將如何做到對mysql CDC的,官網宣傳的一鍵同步整庫,到底靠不靠譜?
0. Doris 對 mysql 資料匯入的支援
在開始聊Doris對mysql CDC的支援之前,我們先來看看Doris官方文件對mysql的支援有哪些。
開啟官網,透過搜尋關鍵字「mysql」可以得到如下一眾結果:
從搜尋的結果來看,其中支援mysql CDC的有:
1. MySQL binlog Load:這個除了需要mysql支援binlog功能外,還需要額外借助 cancel 這個工具;
2. MySQL to Doris(生態擴充套件):利用額外開發的指令碼,同步mysql資料到Doris。
對於第1個來說,因為要用到 cancel,所以這算是一個同步mysql資料的“通用”解決方案,根據我的經驗,這個肯定是可行的,但個人認為實現步驟有些麻煩,所以暫時不想做嘗試。
對於第2種,是針對Doris定製的一種mysql資料匯入策略,根據Doris的VP介紹說,這個方案是一個客戶貢獻的,一會我們使用起來看看好使不。
但是,比較有意思的是,Doris官方目前主推同步 mysql 資料的方案,並沒有出現在剛才那個索引推薦裡,而是透過Flink Doris Connector來實現對mysql資料的匯入。
那麼今天這篇文章,就來聊聊這兩種可以實現mysql CDC的方案,到底怎麼樣?
1. MySQL to Doris方案
從官方文件的篇幅安排來看,給了這個方案很大一塊描述的內容,看起來好像挺厲害的樣子。
但是,當我把對應的指令碼下載下來之後,根據文件描述的步驟來操作時,很快就失望了。
文件描述說,可以根據需要,配置你要匯入的mysql源表,以及最終的Doris表。
於是我在 mysql 中分別建立了一個表結構簡單的小表,跟一張表結構稍微複雜一點的大表,然後根據它的要求,一步步執行配置、匯入。
最後,一頓操作猛如虎(各種嘗試之後),發現,就匯入了那張簡單表的表結構,其他啥玩意都沒有。
(整個操作過程略...)
總之,該方案很坑爹,強烈建議把文件結構調整一下,既然不靠譜,就不要佔用這麼大的篇幅,容易誤導像我這種嚴重依賴官方文件的人。
2. Flink CDC 方案趟坑
既然是官方最推薦的,那我們高低得試一試,但是這樣一來呢,就凸顯出一個問題。
那便是,Doris 想要順利、高效地同步 mysql 資料來源,現階段必須得藉助外力,而對比之下,Clickhouse 是完全可以利用它自身的功能,就能實現對mysql表同步的()。
也就是說,Doris官方推薦的這個資料匯入方案,必須要你提前具備Flink環境(開發和執行都要)。
其實透過Flink CDC讀取mysql寫Doris的案例,我之前寫過一篇文章(),描述瞭如何透過將一張具體的mysql目標表,寫入到Doris的過程。
只不過,這個案例當時只能一次同步一張,而且還需要提前在Doris裡建立目標表結構,如果匯入過程再簡單點就最好了。
這不,Doris官方宣稱較新版本(1.4及往後版本)的 flink-doris-connector,可以滿足所謂「一鍵整庫同步」,這樣一來,就只需要指定 mysql 資料來源端的連線方式和庫名,而到Doris端的目標表結構,則會根據這兩個資料庫之間,對應的對映關係主動建立(連庫名都不用自己建)。
摘自Doris官方公眾號
既然都這麼說了,那我們必須得來試一波。
從官方文件的描述來看,用這種匯入方案是相當簡單的:
可以看到,描述中說,只要你使用這個對應的 connector 包,然後輸入對應的資料庫配置,就能實現對整庫表的匯入了。
但真的有這麼簡單嗎?我表示嚴重懷疑。
來,根據我當下的Flink版本(1.15),我從maven中央倉庫下載了 flink-doris-connector-1.15-1.4.0.jar 這個包。
然後根據文件要求,啟動下面的命令:
flink run -t yarn-session -Dyarn.application.id=application_1696747391642_15889\
-Dexecution.checkpointing.interval=10s \
-Dparallelism.default=3 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
./flink-doris-connector-1.15-1.4.0.jar \
mysql-sync-database \
--database from_mysql8 \
--mysql-conf hostname=192.168.221.173 \
--mysql-conf port=3306 \
--mysql-conf username=xxx \
--mysql-conf password=xxxxx \
--mysql-conf database-name=test \
--sink-conf fenodes=192.168.221.174:8030 \
--sink-conf username=root \
--sink-conf password= \
--sink-conf jdbc-url=jdbc:mysql://192.168.221.174:9030 \
--sink-conf sink.label-prefix=mysql2doris01 \
--table-conf replication_num=2
用的yarn-session執行模式
就是這麼一個簡單的提交命令,卻是引發一系列「噩夢」的開始(就說沒那麼簡單),接下來遇到的坑,讓我輕微的有點懷疑人生。
2.1 坑一
剛一提交上面這個命令,還沒等我反映過來,就丟擲下面這個異常:
很明顯,缺包。
一查呢,缺的是 flink-connector-debezium-2.4.0.jar 這個包(至於版本我是怎麼知道,因為之前開發的flink軟體工程中可以查到),於是就給加上吧,加到哪呢?
因為Flink的提交命令不像spark,可以新增依賴包的路徑,這裡就只能暫時放到Flink HOME目錄的lib子目錄中。
再次提交任務,該問題消失。
2.2 坑二
但是很快,另一個問題又來了,又丟擲了下面這個錯:
再一查呢,又是缺包,缺誰呢?缺 flink-connector-mysql-cdc-2.4.0.jar。
用同樣的辦法,下載之後給加到Flink的lib目錄下,這個問題也消失了。
2.3 坑三
接著,還是缺包:
缺 mysql-connector-java-8.0.28.jar,補上。
2.4 坑四
還沒完,還是缺:
這回缺的是 debezium-api-1.9.7.Final.jar,繼續補。
2.5 坑五
這回缺的是 connect-json-3.2.0.jar。
補!
2.6 坑六
又缺,缺的是 connect-api-3.2.0.jar。
還補!
2.7 坑七
等第7個坑出現的時候,我實在忍不了了,因為這次丟擲的異常,跟第五個坑丟擲來的異常是一毛一樣的。
也就是說,現在已經不再是缺包導致的問題了,而是引入的jar包太多導致衝突了。
這特喵的可咋整?感覺把自己一步步逼到懸崖邊。
3. 正確的玩法
片刻冷靜之後,我轉念一想,咦... 我上次用Flink CDC同步mysql到Doris,不是用的軟體工程開發的嗎?而且期間還解決過jar包衝突問題,最關鍵是,這次同步需要的核心jar包,上次好像已經引入過了耶。
只不過區別在於,之前我用的1.2的版本,現在因為需要同步整庫,要用到1.4版本。
於是果斷將軟體工程的,該connector的版本升級到1.4.0.
然後將該工程編譯打包,得到一個已經解決過jar包衝突問題,且含各種必要依賴的fat jar。
這樣一來呢,之前那些下載的所有依賴包就都不再需要了,因為這個包已經全部包括在內。
接下來,就將這個fat jar上傳到flink伺服器(客戶端),然後啟動下面的命令:
flink run -t yarn-session -Dyarn.application.id=application_1696747391642_15889\
-Dexecution.checkpointing.interval=10s \
-Dparallelism.default=3 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
./flink-coding-1.0-SNAPSHOT-with-dependencies.jar \
mysql-sync-database \
--database from_mysql8 \
--mysql-conf hostname=192.168.221.173 \
--mysql-conf port=3306 \
--mysql-conf username=xxx \
--mysql-conf password=xxxxx \
--mysql-conf database-name=test \
--sink-conf fenodes=192.168.221.174:8030 \
--sink-conf username=root \
--sink-conf password= \
--sink-conf jdbc-url=jdbc:mysql://192.168.221.174:9030 \
--sink-conf sink.label-prefix=mysql2doris01 \
--table-conf replication_num=2
關於這個命令中的一些引數,詳情去參考官方文件,說的很清楚,這裡就不贅述了。
這一次的執行,就變得非常絲滑,沒有任何異常丟擲來。
最後可以看到,mysql test庫中的6張表全部同步過來了,其中的資料量也是一條不差:
從mysql的test庫同步過來的所有表
後續透過分別操作mysql源表的新增,修改,刪除之後,Doris表都可以實時捕捉到變化。
(同樣,篇幅原因,這裡不展示,具體的下次直播給大家看)
這一次,終於靠譜了。
總結
從以上的實踐論證來看,透過利用開發環境的IDE,整合Flink CDC必要的依賴(flink-doris-connector-1.4.0),然後將其build成一個fat jar.
之後,再根據官方文件給出的flink提交命令,指定相應的mysql,以及Doris配置,才能完成所謂的mysql「整庫一鍵同步」。
而如果你只是簡單的直接根據官網給出的示例來操作,肯定是搞不定的。
要不怎麼說,凡事需要自己動手實踐呢,你如果完全輕信文件的說明,而不加以思考,會很容易被帶溝裡。
另外,如果要跟 Clickhouse 做個對比的話(上篇文章內容),在能夠滿足相同功能的同時,CK的實現顯然要更簡單一些。
至於Doris跟CK各自提供的 mysql CDC功能的穩定性如何,我們還需要透過時間來驗證。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2996452/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- streampark+flink一鍵整庫或多表同步mysql到doris實戰MySql
- 不那麼靠譜的ORA_ROWSCN
- 如何招一個靠譜的前端前端
- 曝光實體線上現場同步靠譜網站網站
- MySQL 轉dorisMySql
- 無人值守的運維到底靠譜不靠譜?運維
- Angular 2 + 折騰記 :(8) 動手寫一個不怎麼靠譜的上傳元件Angular元件
- C#中OCR的靠譜方式C#
- 如何選擇一家靠譜的IT培訓機構?
- 雲ERP真的靠譜嗎?
- 車聯網靠譜嗎?
- 搜狐號一鍵同步助手,多個賬號一鍵同步
- 哪裡有賣靠譜的冒名卡
- 掃碼領雞蛋聽靠譜的
- 愛奇藝一鍵同步工具,一鍵同步多個平臺
- 想報TRIZ培訓班,報過培訓班的朋友說說靠譜不?
- 使用SeaTunnel從InfluxDB同步資料到DorisUX
- 細分市場樣本量不夠時,如何得出靠譜的滿意度分值?
- 靠譜的div引入任何外鏈內容
- 你的免費OA系統靠譜嗎?
- 為CRM選型推薦一款靠譜的CRM系統
- 學習web前端,自學靠譜還是培訓靠譜?別糾結看完秒懂Web前端
- 正規網投真人實體靠譜平臺,可以視訊驗證的靠譜玩網投平臺
- 中學無線准入靠譜嗎
- 高仿包在哪裡買靠譜
- 如何選擇一家靠譜的網路安全培訓機構?
- 一款基本靠譜,略微出圈的2021十大科技預測
- Android:簡單靠譜的動態高斯模糊效果Android
- 如何選擇靠譜的Python培訓機構?Python
- 怎麼判斷靠譜的it培訓機構
- 企業wifi解決方案靠譜嗎WiFi
- 十大靠譜玩彩臺子
- 百勝線上實體靠譜嗎
- 華納互娛彩票靠譜嗎-19188190807
- 年底辭職進修提升,靠譜麼?
- 配置雲伺服器,如何選擇一個靠譜的雲服務商?伺服器
- 自媒體一鍵同步分發平臺,一鍵同步分發多個賬號
- 網上的微投有沒有正規的靠譜的