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

1.相關背景:

在各個互聯網公司的項目架構中。有一個系統必不可少,那就是各類的搜索系統。不管是b端商家端還是c端用戶。都有各種各樣的搜索需求。我們今天就基于mysql,canal,kafka,elasticsearch搭建一個簡單的訂單搜索平臺。

大致流程如下:

1)當一條新的訂單數據存入到數據庫

2)canal監聽到數據變更

3)數據變更存入到kafka中

4)消息監聽系統監聽kafka消息將數據存入到elasticsearch當中

5)構建搜索api提供用戶查詢

第一部分:

系統搭建階段:

1.數據準備過程(mysql已經安裝完成):

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客戶端導入(source腳本):

導入完成后,查看數據庫:


相關表:

2.canal安裝:

canal相關介紹:

https://github.com/alibaba/canal

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

使用場景:

基于日志增量訂閱和消費的業務包括

數據庫鏡像

數據庫實時備份

索引構建和實時維護(拆分異構索引、倒排索引等)

業務 cache 刷新

帶業務邏輯的增量數據處理

下面安裝過程:

首先我們需要配置mysql.cnf

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

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

mysql.server restart

接下來需要授權:

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

CREATE USER canalI DENTIFIED BY 'canal';

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

FLUSH PRIVILEGES;

接下來下載最新的canal發布包:

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,需要改成自己的數據庫信息

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,需要改成自己的數據庫信息

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 代表數據庫的編碼方式對應到 java 中的編碼類型,比如 UTF-8,GBK , ISO-8859-1

如果系統是1個 cpu,需要將 canal.instance.parser.parallel 設置為 false

啟動

sh bin/startup.sh

關閉

sh bin/stop.sh

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。