一、背景
ES是一個分佈式的搜索框架。能快速查數據,主要他包含Elasticsearch,Kibana(一個網頁接口用來查ES的數據)
數據哪裏來呢,當然是要麼從數據庫來,要麼一條條插入到ES裏。那麼這次的需求就是從mysql數據庫導入數據到ES裏。
二、軟件
一版本:
java =1.8
Elasticsearch=6.2.4
Kibana=6.2.4
Canal=1.1.4 #阿里的一個同步mysql數據庫到Elasticsearch的組件(有些叫插件,其實包含服務端和客服端,叫中間件比較合適)
sing1ee:elasticsearch-jieba-plugin=6.4.0 # 這是一個ES的分詞插件需要修改成6.2.4,然後用gradle打包。
二版本:
java =1.8
Elasticsearch=7.7.0
Kibana=7.7.0
Canal=1.1.4 #阿里的一個同步mysql數據庫到Elasticsearch的組件(有些叫插件,其實包含服務端和客服端,叫中間件比較合適)
sing1ee:elasticsearch-jieba-plugin=7.7.0 # 這是一個ES的分詞插件 也需要用gradel打包
三、步驟
1.下載配置Elasticsearch,運行
官網速度很慢,用梯子下吧,或者其他人那裏發。
# 修改文件elasticsearch-7.7.0/config/elasticsearch.yml
# 該文件裏都有這些參數,只需要修改
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
./elasticsearch-7.7.0/bin/elasticsearch # 直接運行
./elasticsearch-7.7.0/bin/elasticsearch -d # 後臺運行
2. 下載配置Kibana,運行,本質是一個網頁服務端
# 該配置文件kibana-7.7.0-linux-x86_64/config/kibana.yml
# 修改爲
server.host: "0.0.0.0"
#運行
./bin/kibana
3.測試是否配置成功,不成功那就看日誌去了,一般都會成功的
http://10.90.0.10:5601/
點一個工具一樣按鈕
GET /_cat/indices
4.canal安裝和使用
本質是一個服務端(deployer)和客戶端(adapter),那麼就是開啓deployer 然後啓動adapter,用,adapter導入mysql的數據。
canal=1.1.4 下載地址:
https://github.com/alibaba/canal/releases
1)配置depolyer
# 修改該文件 deployer/conf/example/instance.properties
canal.instance.master.address=10.90.0.11:3306 #你的mysql數據庫所在的ip:port
canal.instance.dbUsername=root #你的mysql數據庫的用戶
canal.instance.dbPassword=123 #你的mysql數據庫的用戶
2)配置adapter
# 1.修改該文件adapter/conf/application.yml
canal.conf:
mode: tcp # kafka rocketMQ
canalServerHost: 127.0.0.1:11111
srcDataSources:
defaultDS:
url: jdbc:mysql://10.90.0.11:3306/book?useUnicode=true #10.90.0.11 是mysql所在的地址 book數據庫名
username: root
password: 123
# ......
- name: es
hosts: 127.0.0.1:9300 # 127.0.0.1:9200 for rest mode
properties:
mode: rest # 這裏一定要設置成rest不然報什麼Transform之類錯誤
# security.auth: test:123456 # only used for rest mode
cluster.name: my-application #elasticsearch
# 修改 adapter/conf/es/mytest_user.yml
esMapping:
_index: index_name #你的Elasticsearch的索引名,這個首先要建索引,才能到mysql數據
_type: _doc
_id: _id
upsert: true
sql: "select a.id as _id, a.title, a.content from book a"
# 怎麼建索引,在kibana的網頁端
PUT /index_name
{ "mappings": {
"_doc": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
}
}
}
}
}
3)啓動
進入各自的bin文件夾,運行./startup.sh
注意:Elasticsearch6.2.4 和 Elasticsearch7.7.0不同_doc這個字段
4)導數據了
用postman發一個請求,就可以把mysql中book數據庫中的book表的數據導入名稱和內容了。
http://10.90.0.10:8081/etl/es/mytest_user.yml
四、總結
總之需要明白Elaticsearch是一個類似的數據庫。canal是一個CS(client-server)中間件。
主要配置canal的adapter 的application.yml,我理解是怎麼和deployer、mysql鏈接。其次adapter/config/es/mytest_user.yml是一個任務文件。
附上一個問題解決網址
https://www.jianshu.com/p/041038a0f916