一、同步雙寫
也就是同步調(diào)用,這是一種最為簡(jiǎn)單的方式,在將數(shù)據(jù)寫到mysql時(shí),同時(shí)將數(shù)據(jù)寫到ES。
優(yōu)點(diǎn)
1.業(yè)務(wù)邏輯簡(jiǎn)單
2實(shí)時(shí)性高
缺點(diǎn)
1.硬編碼,有需要寫入mysql的地方都需要添加寫入ES的代碼
2.業(yè)務(wù)強(qiáng)耦合
3.存在雙寫失敗丟數(shù)據(jù)風(fēng)險(xiǎn)
4.性能較差:本來mysql的性能不是很高,再加一個(gè)ES,系統(tǒng)的性能必然會(huì)下降。
雙寫失敗風(fēng)險(xiǎn)
ES系統(tǒng)不可用;
程序和ES之間的網(wǎng)絡(luò)故障;
程序重啟,導(dǎo)致系統(tǒng)來不及寫入ES等。
針對(duì)這種情況,有數(shù)據(jù)強(qiáng)一致性要求的,就必須雙寫放到事務(wù)中來處理,而一旦用上事物,則性能下降更加明顯。
項(xiàng)目演示
請(qǐng)移步:MySQL與ES數(shù)據(jù)同步之同步調(diào)用
二、異步雙寫(MQ方式)
針對(duì)多數(shù)據(jù)源寫入的場(chǎng)景,可以借助MQ實(shí)現(xiàn)異步的多源寫入,這種情況下各個(gè)源的寫入邏輯互不干擾,不會(huì)由于單個(gè)數(shù)據(jù)源寫入異?;蚓徛绊懫渌麛?shù)據(jù)源的寫入,雖然整體寫入的吞吐量增大了,但是由于MQ消費(fèi)是異步消費(fèi),所以不適合實(shí)時(shí)業(yè)務(wù)場(chǎng)景。
優(yōu)點(diǎn)
性能高
不易出現(xiàn)數(shù)據(jù)丟失問題,主要基于MQ消息的消費(fèi)保障機(jī)制,比如ES宕機(jī)或者寫入失敗,還能重新消費(fèi)MQ消息。
多源寫入之間相互隔離,便于擴(kuò)展更多的數(shù)據(jù)源寫入
缺點(diǎn)
硬編碼問題,接入新的數(shù)據(jù)源需要實(shí)現(xiàn)新的消費(fèi)者代碼
系統(tǒng)復(fù)雜度增加:引入了消息中間件
可能出現(xiàn)延時(shí)問題:MQ是異步消費(fèi)模型,用戶寫入的數(shù)據(jù)不一定可以馬上看到,造成延時(shí)。
項(xiàng)目演示
請(qǐng)移步:MySQL與ES數(shù)據(jù)同步之異步調(diào)用
三、基于Datax同步
DataX 是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái),實(shí)現(xiàn)包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。
核心組件
Reader:數(shù)據(jù)采集模塊,負(fù)責(zé)從源采集數(shù)據(jù)
Writer:數(shù)據(jù)寫入模塊,負(fù)責(zé)寫入目標(biāo)庫
Framework:數(shù)據(jù)傳輸通道,負(fù)責(zé)處理數(shù)據(jù)緩沖等
以上只需要重寫Reader與Writer插件,即可實(shí)現(xiàn)新數(shù)據(jù)源支持
從一個(gè)JOB來理解datax的核心模塊組件:
datax完成單個(gè)數(shù)據(jù)同步的作業(yè),稱為Job,job會(huì)負(fù)責(zé)數(shù)據(jù)清理、任務(wù)切分等工作;
任務(wù)啟動(dòng)后,Job會(huì)根據(jù)不同源的切分策略,切分成多個(gè)Task并發(fā)執(zhí)行,Task就是執(zhí)行作業(yè)的最小單元
切分完成后,根據(jù)Scheduler模塊,將Task組合成TaskGroup,每個(gè)group負(fù)責(zé)一定的并發(fā)和分配Task
架構(gòu)圖
支持的數(shù)據(jù)源及操作
項(xiàng)目演示
請(qǐng)移步:DataX實(shí)現(xiàn)Mysql與ElasticSearch(ES)數(shù)據(jù)同步
四、基于Binlog實(shí)時(shí)同步
實(shí)現(xiàn)原理
具體步驟如下:
讀取mysql的binlog日志,獲取指定表的日志信息;
將讀取的信息轉(zhuǎn)為MQ;
編寫一個(gè)MQ消費(fèi)程序;
不斷消費(fèi)MQ,每消費(fèi)完一條消息,將消息寫入到ES中。
優(yōu)點(diǎn)
沒有代碼侵入、沒有硬編碼;
原有系統(tǒng)不需要任何變化,沒有感知;
性能高;
業(yè)務(wù)解耦,不需要關(guān)注原來系統(tǒng)的業(yè)務(wù)邏輯。
缺點(diǎn)
構(gòu)建Binlog系統(tǒng)復(fù)雜;
如果采用MQ消費(fèi)解析的binlog信息,也會(huì)像方案二一樣存在MQ延時(shí)的風(fēng)險(xiǎn)。
業(yè)界目前較為流行的方案:使用canal監(jiān)聽binlog同步數(shù)據(jù)到es
項(xiàng)目演示
請(qǐng)移步:
Docker部署Canal監(jiān)聽MySQL binlog
SpringBoot整合Canal實(shí)現(xiàn)MySQL與ES數(shù)據(jù)同步文章來源:http://www.zghlxwxcb.cn/news/detail-708344.html
結(jié)束~文章來源地址http://www.zghlxwxcb.cn/news/detail-708344.html
到了這里,關(guān)于MySQL與ES數(shù)據(jù)同步的四種方案及實(shí)踐演示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!