1、ElasticSearch瞭解java
ElasticSearch是一個基於lucene的分佈式檢索服務器。相對於solr搜索,在大數據量和數據併發量上更有優點,同時,也有數據庫的數據存儲功能,但提供了比數據庫更多的存儲功能,如分詞搜索、關聯度搜索等,同事搜索速度也不是一個級別,達到百萬數據/秒的查詢數據。總結優勢爲:實時搜索、穩定、可靠、快速、安裝方便等。node
ElasticSearch中的概念(或叫作結構)和數據庫中進行對比:mysql
(1)、index:索引,至關於數據庫中的一個庫,裏面能夠創建不少表,存儲不一樣類型的數據spring
(2)、type:類型,至關於數據庫中的一張表,存儲json類型的數據sql
(3)、document:文檔,一個文檔至關於數據庫中的一條數據數據庫
(4)、field:列,至關於數據庫中的列,也就是一個屬性npm
(5)、shards:分片,通俗理解,就是數據分紅幾塊區域來存儲,能夠理解爲mysql中的分庫分表(不太恰當)json
(6)、replicas:備份,就是分片的備份數,至關於數據庫中的備份庫springboot
2、ElasticSearch+nodejs+head集成安裝(安裝環境:jdk8,window10)服務器
一、先安裝ElasticSearch
(注意:ElasticSearch目前最新版本達到了7.0.1,但不一樣的版本在不一樣的安裝環境下回出現不一樣的兼容性問題,詳見百度,目前遇到的問題有:用7.0.1版本時沒法設置network.host爲0.0.0.0,這樣見沒法讓外部服務去範圍當前服務器,故改爲如今的6.7.2是能夠的,而且,ElasticSearch是Java項目,須要依賴jdk,而且對jdk版本有要求,目前安裝的是jdk8。另外,安裝es服務時安裝路徑最好不要包含空格,不然在作經過logstash數據同步的時候會報莫名的錯誤)
(1)、安裝:具體安裝爲在官網https://www.elastic.co/cn/downloads/elasticsearch#ga-release下載相應的版本後如:elasticsearch-6.7.2.zip,進行解壓便可。
(2)、啓動:到elasticsearch-6.7.2\bin目錄下,啓動elasticsearch.bat便可
(3)、判斷是否安裝啓動成功:訪問http://localhost:9200,出現以下圖即爲成功
二、安裝nodejs
(1)、在https://nodejs.org/en/download/ 下載對應的版本,進行傻瓜式安裝(默認安裝成功後自動配置環境變量)
(2)、安裝成功後使用 node -v查看nodejs的版本,使用npm -v查看npm的版本,如圖:
(3)、在nodejs的根目錄下,執行npm install -g grunt-cli命令,安裝grunt,安裝完成後執行grunt -version查看是否安裝成功,如圖:
三、安裝head
(1)、網上下載elasticsearch-head.zip文件解壓便可
(2)、修改elasticsearch-head文件目錄下的Gruntfile.js文件,添加以下內容:
(3)、修改elasticsearch-head\_site文件目錄下的app.js文件內容,將紅框中的內容修改成服務器地址,或是本機部署則不用修改。
(4)、進入elasticsearch-head的跟目錄下執行npm install 命令,如圖:
(5)、在elasticsearch-head的根目錄下啓動nodejs,執行grunt server 或者 npm run start,如圖:
(6)、訪問http://localhost:9100,出現如圖所示,則head+nodejs安裝成功
(7)、若想讓head啓動並連接elasticsearch成功,需先啓動elasticsearch,若head和elasticsearch不在同一服務器上時,須要在elasticsearch中作以下配置:
修改elasticsearch.yml文件,在文件末尾加入:
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
放開network.host: 192.168.0.1的註釋並改成network.host: 0.0.0.0(這樣外部服務器也能訪問es服務)
放開cluster.name(集羣名稱,服務啓動前修改後,之後不要再隨意修改);node.name(集羣使用時回用到);http.port(默認端口號便可)的註釋
雙擊elasticsearch.bat重啓es
修改完elasticsearch.yml文件完啓動es後再訪問http://localhost:9100,若head連接es成功後以下圖:
四、在head中對es數據進行操做,如,添加刪除索引,對索引中的數據進行增刪改差等操做。(詳見百度)
3、springboot+elasticsearch集成及簡單使用
一、先搭建好單獨的springboot項目,以及部署好elasticsearch服務
二、具體集成步驟及經過對象的方式操做elasticsearch的具體步驟語法詳見博客:
http://www.javashuo.com/article/p-hbqxmonq-eu.html
4、利用logstash實現MySQL中的數據全量/增量同步到elasticsearch服務器中(window10環境)
一、logstash的下載安裝(logstash的安裝時路徑不要包含空格,某種在數據同步的時候會數據同步不成功)
logstash的官網下載地址:https://www.elastic.co/downloads/logstash,注意下載的版本要與elasticsearch版本必須一直,如當前elasticsearch的版本是6.7.2,則logstash的版本也必須是6.7.2
注意,在網上各類查找資料發現好多資料都需集成logstash-jdbc-input插件才能實現數據同步,後臺才發現這個和版本有關係,在elasticsearch5.X及以後的版本是不須要集成該插件便可
下載好相應的版本後解壓便可(注意解壓的路徑,最好不要有中文和空格)。
二、logstash配置
(1)、在logstash-6.7.2路徑下建立空文件夾,如mysql,用來存放相關配置文件等
(2)、在建立的新文件夾中(mysql文件夾)中放入驅動包:mysql-connector-java.jar
(3)、在建立的新文件夾中(mysql文件夾)中建立一個sql文件,如find.sql,從這裏開始,就是logstash同步數據庫的核心操做了,在這裏建立的sql文件主要內容是:mysql須要同步Elasticsearch的具體數據的查詢方式,若是是全量同步,只須要select * from [table]便可
(4)、在建立的新文件夾中(mysql文件夾)中建立一個conf文件,如jdbc.conf文件,該文件用於連接數據庫和elasticsearch,其內容爲:(注意,有的可能不識別註解,運行時須要將註解去掉)
input { stdin { } jdbc { # mysql 數據庫連接,my_es爲數據庫名 jdbc_connection_string => "jdbc:mysql://localhost:3306/my_es" # 用戶名和密碼 jdbc_user => "root" jdbc_password => "root" # 驅動 jdbc_driver_library => "D:\logstash-6.7.2\mysql\mysql-connector-java-5.1.46.jar" # 驅動類名 jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" # 執行的sql 就是上一步建立的sql文件的絕對路徑+文件名字 statement_filepath => "D:\logstash-6.7.2\mysql\find.sql" # 設置監聽間隔 各字段含義(由左至右)分、時、天、月、年,所有爲*默認含義爲每分鐘都更新 schedule => "* * * * *" # 索引類型 type => "center" } } filter { json { source => "message" remove_field => ["message"] } } output { elasticsearch { # ES的IP地址及端口 hosts => ["localhost:9200"] # 索引名稱 index => "article" # 自增ID id必須是待查詢的數據表的序列字段 document_id => "%{id}" } stdout { # JSON格式輸出 codec => json_lines } }
網上的第二中配置,部分不一樣而已:
input { stdin { } jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/你的數據庫名字" jdbc_user => "你的數據庫用戶名" jdbc_password => "你的數據庫密碼" jdbc_driver_library => "C:/logstash/bin/mysql-connector-java-5.1.44-bin.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" statement => "SELECT id(主鍵),其餘內容 FROM 你的表" schedule => "* * * * *" } } output { stdout { codec => json_lines } elasticsearch { hosts => "localhost:9200" index => "你要建立的索引名" document_type => "你要建立的索引類型" document_id => "%{id}" } }
另外一個說明比較詳細的版本:
input { stdin { } jdbc { # 鏈接的數據庫地址和哪個數據庫,指定編碼格式,禁用SSL協議,設定自動重連 jdbc_connection_string => "jdbc:mysql://數據庫地址:端口號/數據庫名?characterEncoding=UTF-8&useSSL=false&autoReconnect=true" # 你的帳戶密碼 jdbc_user => "帳號" jdbc_password => "密碼" # 鏈接數據庫的驅動包,建議使用絕對地址 jdbc_driver_library => "mysql/mysql-connector-java-5.1.45-bin.jar" # 這是不用動就好 jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" #處理中文亂碼問題 codec => plain { charset => "UTF-8"} #使用其它字段追蹤,而不是用時間 use_column_value => true #追蹤的字段 tracking_column => testid record_last_run => true #上一個sql_last_value值的存放文件路徑, 必需要在文件中指定字段的初始值 last_run_metadata_path => "mysql/station_parameter.txt" jdbc_default_timezone => "Asia/Shanghai" statement_filepath => "mysql/jdbc.sql" #是否清除 last_run_metadata_path 的記錄,若是爲真那麼每次都至關於從頭開始查詢全部的數據庫記錄 clean_run => false # 這是控制定時的,重複執行導入任務的時間間隔,第一位是分鐘 schedule => "*/5 * * * *" type => "jdbc" } } filter { json { source => "message" remove_field => ["message"] } } output { elasticsearch { # 要導入到的Elasticsearch所在的主機 hosts => "192.168.105.180:9200" # 要導入到的Elasticsearch的索引的名稱 index => "db_anytest" # 類型名稱(相似數據庫表名) document_type => "table_anytest" # 主鍵名稱(相似數據庫主鍵) document_id => "%{testid}" # es 帳號 user => elastic password => changeme } stdout { # JSON格式輸出 codec => json_lines } }
(5)、多表數據同步https://www.jianshu.com/p/e359880541b8
三、啓動logstash開始同步數據庫
(1)、確保elasticsearch服務已啓動,而且要同步的表裏有相應的數據
(2)、cmd一個新窗口,進入到D:\logstash-6.7.2\bin
(3)、運行命令logstash -f ../mysql/jdbc.conf ,其中logstash -f表示運行指令, ../mysql/jdbc.conf表示咱們配置的jdbc.conf文件路徑,成功啓動後,能夠在終端中看見運行的sql和同步的數據,如圖:
(4)、同步成功後便可在head中查看同步到elasticsearch中的數據,其中timestamp和version是elastisearch本身添加的字段。
(5)注意點:
a、在同步的時候,若是是首次全量同步的話,能夠不須要在elasticsearch中去新建索引和類型,同步的時候會根據配置自動建立
b、如果增量更新的話,在sql中添加查詢條件便可,如
where testid >= :sql_last_start
c、對與多表數據同步的狀況,參考文獻:https://www.jianshu.com/p/e359880541b8,進行操做