問題背景
最近有一個(gè)需求:原有一些mysql數(shù)據(jù),這些數(shù)據(jù)量很大,且包含文本信息,需要對(duì)其進(jìn)行搜索,這時(shí)如果使用mysql的like來匹配,效率會(huì)很低,且很可能影響整個(gè)系統(tǒng)的運(yùn)行,經(jīng)過和同事的討論,最終決定使用es來做搜索。
但是源數(shù)據(jù)有很多關(guān)聯(lián)關(guān)系,搜索的時(shí)候也會(huì)帶上這些條件,因此需要將文本信息同步到es,且當(dāng)mysql數(shù)據(jù)有新增、更新或刪除操作時(shí),也實(shí)時(shí)同步到es.
工具調(diào)研
從mysql同步到es的工具,目前市面上比較火的是logstash和canal
logstash
logstash經(jīng)過調(diào)研就能知道,它依賴于更新字段,也就是說,需要有一個(gè)字段如update_time,當(dāng)這個(gè)時(shí)間大于當(dāng)前時(shí)間,就表明數(shù)據(jù)做了更新。但由于我們的數(shù)據(jù)來源于多個(gè)渠道,大家規(guī)范不統(tǒng)一(很可能時(shí)區(qū)都不統(tǒng)一),且update_time字段沒有做觸發(fā)更新,因此不考慮使用logstash
canal
canal是可以使用隊(duì)列的,但考慮到部署難度,以及盡量少引入其他工具的原則,不使用隊(duì)列,而是直接監(jiān)聽消息。
事實(shí)上,想要啟動(dòng)canal參考這篇文檔就足夠了canal QuickStart
但實(shí)際部署時(shí)會(huì)踩很多坑,比如canal的readme以及wiki首頁(yè)都沒有明顯提到ClientAdapter這個(gè)工具,事實(shí)上這個(gè)工具是很好用的,它可以批量將mysql數(shù)據(jù)導(dǎo)入es,也可以自動(dòng)同步mysql數(shù)據(jù)變動(dòng)到es,非常好用,因此,下載的時(shí)候最好就把deployer和adapter一塊下載了
canal基本按照官方文檔來部署就行,沒有多大坑,但記得在這之前確認(rèn)下bin_log是否真的開啟了,否則canal會(huì)報(bào)錯(cuò),而且報(bào)錯(cuò)信息難以發(fā)現(xiàn)原因。文章來源:http://www.zghlxwxcb.cn/news/detail-604048.html
clientAdapter
第一個(gè)坑,es的監(jiān)聽。我本機(jī)隨便下的一個(gè)es,實(shí)際上是有默認(rèn)賬號(hào)密碼的,但是不知道是我版本原因還是怎么樣,總之用默認(rèn)賬號(hào)密碼無(wú)法登錄,這時(shí)我生成了以下賬號(hào)密碼,參考的這篇文章:es賬號(hào)密碼設(shè)置,注意要記得存一下生成的賬號(hào)密碼。
然后,我發(fā)現(xiàn)adapter依舊報(bào)錯(cuò)(這里報(bào)錯(cuò)信息找不到了),發(fā)現(xiàn)是es沒有設(shè)置
。。。
暫時(shí)沒時(shí)間來寫這篇文章,先直接寫下途中會(huì)遇到的坑及解決方案
注意事項(xiàng):
(1)adapter的sql語(yǔ)句配置中,不要使用反引號(hào)"`",否則會(huì)報(bào)奇怪的錯(cuò)(報(bào)錯(cuò)信息忘了)
(2)adapter1.16的bug:所有表都需要?jiǎng)e名,哪怕是一個(gè)表,也要寫成如:select u.name from user as u
(3)大量數(shù)據(jù)導(dǎo)入,需要設(shè)置并發(fā)數(shù),提高并發(fā)數(shù)可解決導(dǎo)入失敗的問題
(4)記得設(shè)置下es賬號(hào)密碼,以及, es的配置中network.host要改成network.host: 0.0.0.0(如果遇到了adapter同步500,INternal Server Error,不要問,先這么改吧,我也是查issue查出來的)
(5)有可能跑一段時(shí)間adapter不再同步了,臨時(shí)的解決方案是把instance下的mate.bat、h2.mv.db刪掉,會(huì)自動(dòng)繼續(xù)同步的,治本的方案暫時(shí)沒時(shí)間考慮文章來源地址http://www.zghlxwxcb.cn/news/detail-604048.html
到了這里,關(guān)于canal實(shí)現(xiàn)mysql數(shù)據(jù)實(shí)時(shí)同步到es的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!