mysql+canal+kafka+elasticsearch構(gòu)建訂單搜索平臺(canal搭建)

1.相關(guān)背景:

在各個互聯(lián)網(wǎng)公司的項(xiàng)目架構(gòu)中腻暮。有一個系統(tǒng)必不可少屉更,那就是各類的搜索系統(tǒng)徙融。不管是b端商家端還是c端用戶。都有各種各樣的搜索需求偶垮。我們今天就基于mysql张咳,canal,kafka似舵,elasticsearch搭建一個簡單的訂單搜索平臺脚猾。

大致流程如下:

1)當(dāng)一條新的訂單數(shù)據(jù)存入到數(shù)據(jù)庫

2)canal監(jiān)聽到數(shù)據(jù)變更

3)數(shù)據(jù)變更存入到kafka中

4)消息監(jiān)聽系統(tǒng)監(jiān)聽kafka消息將數(shù)據(jù)存入到elasticsearch當(dāng)中

5)構(gòu)建搜索api提供用戶查詢

第一部分:

系統(tǒng)搭建階段:

1.數(shù)據(jù)準(zhǔn)備過程(mysql已經(jīng)安裝完成):

testdb.sql

DROP SCHEMA IF EXISTS demo_ds;

DROP SCHEMA IF EXISTS demo_ds_0;

DROP SCHEMA IF EXISTS demo_ds_1;

CREATE SCHEMA IF NOT EXISTS demo_ds;

CREATE SCHEMA IF NOT EXISTS demo_ds_0;

CREATE SCHEMA IF NOT EXISTS demo_ds_1;

CREATE TABLE IF NOT EXISTS demo_ds.t_order (order_id BIGINT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS demo_ds.t_order_item (order_item_id BIGINT NOT NULL AUTO_INCREMENT, order_id BIGINT NOT NULL, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_item_id));

CREATE TABLE IF NOT EXISTS demo_ds_0.t_order_0 (order_id BIGINT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS demo_ds_0.t_order_1 (order_id BIGINT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS demo_ds_0.t_order_item_0 (order_item_id BIGINT NOT NULL AUTO_INCREMENT, order_id BIGINT NOT NULL, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_item_id));

CREATE TABLE IF NOT EXISTS demo_ds_0.t_order_item_1 (order_item_id BIGINT NOT NULL AUTO_INCREMENT, order_id BIGINT NOT NULL, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_item_id));

CREATE TABLE IF NOT EXISTS demo_ds_1.t_order_0 (order_id BIGINT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS demo_ds_1.t_order_1 (order_id BIGINT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS demo_ds_1.t_order_item_0 (order_item_id BIGINT NOT NULL AUTO_INCREMENT, order_id BIGINT NOT NULL, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_item_id));

CREATE TABLE IF NOT EXISTS demo_ds_1.t_order_item_1 (order_item_id BIGINT NOT NULL AUTO_INCREMENT, order_id BIGINT NOT NULL, user_id INT NOT NULL, status VARCHAR(50), PRIMARY KEY (order_item_id));

通過mysql客戶端導(dǎo)入(source腳本):

導(dǎo)入完成后,查看數(shù)據(jù)庫:


相關(guān)表:

2.canal安裝:

canal相關(guān)介紹:

https://github.com/alibaba/canal

quick start:https://github.com/alibaba/canal/wiki/QuickStart

使用場景:

基于日志增量訂閱和消費(fèi)的業(yè)務(wù)包括

數(shù)據(jù)庫鏡像

數(shù)據(jù)庫實(shí)時備份

索引構(gòu)建和實(shí)時維護(hù)(拆分異構(gòu)索引砚哗、倒排索引等)

業(yè)務(wù) cache 刷新

帶業(yè)務(wù)邏輯的增量數(shù)據(jù)處理

下面安裝過程:

首先我們需要配置mysql.cnf

對于自建 MySQL , 需要先開啟 Binlog 寫入功能龙助,配置 binlog-format 為 ROW 模式,my.cnf 中配置如下

然后需要重啟蛛芥,使用如下命令:

mysql.server restart

接下來需要授權(quán):

授權(quán) canal 鏈接 MySQL 賬號具有作為 MySQL slave 的權(quán)限, 如果已有賬戶可直接 grant

CREATE USER canalI DENTIFIED BY 'canal';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENTON*.*TO'canal'@'%';--GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;

FLUSH PRIVILEGES;

接下來下載最新的canal發(fā)布包:

wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz

mkdir /tmp/canal

tar zxvf canal.deployer-1.1.3.tar.gz? -C /tmp/canal

解壓目錄如下:

配置修改

vi conf/example/instance.properties

## mysql serverId

canal.instance.mysql.slaveId = 1234

#position info提鸟,需要改成自己的數(shù)據(jù)庫信息

canal.instance.master.address = 127.0.0.1:3306

canal.instance.master.journal.name =

canal.instance.master.position =

canal.instance.master.timestamp =

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

#username/password,需要改成自己的數(shù)據(jù)庫信息

canal.instance.dbUsername = canal?

canal.instance.dbPassword = canal

canal.instance.defaultDatabaseName =

canal.instance.connectionCharset = UTF-8

#table regex

canal.instance.filter.regex = .\*\\\\..\*

canal.instance.connectionCharset 代表數(shù)據(jù)庫的編碼方式對應(yīng)到 java 中的編碼類型仅淑,比如 UTF-8称勋,GBK , ISO-8859-1

如果系統(tǒng)是1個 cpu,需要將 canal.instance.parser.parallel 設(shè)置為 false

啟動

sh bin/startup.sh

關(guān)閉

sh bin/stop.sh

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涯竟,一起剝皮案震驚了整個濱河市赡鲜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庐船,老刑警劉巖银酬,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筐钟,居然都是意外死亡揩瞪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門篓冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來李破,“玉大人宠哄,你說我怎么就攤上這事∨缥荩” “怎么了琳拨?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屯曹。 經(jīng)常有香客問我狱庇,道長,這世上最難降的妖魔是什么恶耽? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任密任,我火速辦了婚禮,結(jié)果婚禮上偷俭,老公的妹妹穿的比我還像新娘浪讳。我一直安慰自己,他們只是感情好涌萤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布淹遵。 她就那樣靜靜地躺著,像睡著了一般负溪。 火紅的嫁衣襯著肌膚如雪透揣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天川抡,我揣著相機(jī)與錄音辐真,去河邊找鬼。 笑死崖堤,一個胖子當(dāng)著我的面吹牛侍咱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播密幔,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楔脯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胯甩?” 一聲冷哼從身側(cè)響起昧廷,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜡豹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溉苛,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镜廉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愚战。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇唯。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡齐遵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塔插,到底是詐尸還是另有隱情梗摇,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布想许,位于F島的核電站伶授,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏流纹。R本人自食惡果不足惜糜烹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱凝。 院中可真熱鬧疮蹦,春花似錦、人聲如沸茸炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁公。三九已至感论,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贮尖,已是汗流浹背笛粘。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湿硝,地道東北人薪前。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像关斜,于是被迫代替她去往敵國和親示括。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353