一次Elasticsearch使用並同步數據之路

一、背景

 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

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章