1. 程式人生 > >ElasticSearch學習(一):ElasticSearch介紹

ElasticSearch學習(一):ElasticSearch介紹

  一、ElasticSearch是什麼?

  ElasticSearch是一款非常強大的、基於Lucene的開源搜尋及分析引擎,可以幫助你從海量資料中,快速找到相關的資料資訊。

  比如,當你在GitHub上搜索時,ElasticSearch不僅可以幫助你找到相關的程式碼庫,還可以幫助你實現程式碼級的搜尋和高亮顯示;當你在網上購物時,ElasticSearch可以幫助你推薦相關的商品;當你打車時,ElasticSearch可以通過定位附近的乘客和司機,幫助平臺優化排程。

  除了搜尋,結合Kibana、Logstash、Beats開源產品,Elastic Stack(簡稱ELK)還被廣泛運用在大資料近實時分析領域,包括:日誌分析、指標監控、資訊保安等。它可以幫助你探索海量結構化、非結構化資料,按需建立視覺化報表,對監控資料設定報警閾值,通過使用機器學習,自動識別異常狀況。

  ElasticSearch是基於Restful WebApi,使用Java語言開發的搜尋引擎庫類,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。其客戶端在Java、C#、PHP、Python等許多語言中都是可用的。相應下載地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html

  所以,ElasticSearch具備兩個優勢:

  1)天生支援分散式,可水平擴充套件;

  2)提供了Restful介面,降低全文檢索的學習曲線,因為Restful介面,所以可以被任何程式語言呼叫;

  說一下Lucene的優缺點:

  優點:1)高效能;2)易擴充套件;

  缺點:

  1)只能基於Java語言開發;

  2)類庫的介面學習曲線陡峭;

  3)原生並不支援水平擴充套件;

  二、Elastic Stack的構成

  1、ElasticSearch對資料進行搜尋、分析和儲存,其是基於JSON的分散式搜尋和分析引擎,專門為實現水平可擴充套件性、高可靠性和管理便捷性而設計的

它的實現原理主要分為以下幾個步驟:

    1)首先使用者將資料提交到ElasticSearch資料庫中;

    2)再通過分詞控制器將對應的語句分詞;

    3)將分詞結果及其權重一併存入,以備使用者在搜尋資料時,根據權重將結果排名和打分,將返回結果呈現給使用者;

  2、Kibana實現資料視覺化,其作用就是在ElasticSearch中進行民航。Kibana能夠以圖表的形式呈現資料,並且具有可擴充套件的使用者介面,可以全方位的配置和管理ElasticSearch。

    Kibana最早的時候是基於Logstash建立的工具,後被Elastic公司在2013年收購。

    1)Kibana可以提供各種視覺化的圖表;

    2)可以通過機器學習的技術,對異常情況進行檢測,用於提前發現可疑問題;

  3、Beats是一個面向輕量型採集器的平臺,這些採集器可以從邊緣機器向Logstash、ElasticSearch傳送資料,它是由Go語言進行開發的,執行效率方面比較快。從下圖中可以看出,不同Beats的套件是針對不同的資料來源。

  

  4、Logstash是動態資料收集管道,擁有可擴充套件的外掛生態系統,支援從不同來源採集資料,轉換資料,並將資料傳送到不同的儲存庫中。其能夠與ElasticSearch產生強大的協同作用,後被Elastic公司在2013年收購。

    它具有如下特性:

    1)實時解析和轉換資料;

    2)可擴充套件,具有200多個外掛;

    3)可靠性、安全性。Logstash會通過持久化佇列來保證至少將執行中的事件送達一次,同時將資料進行傳輸加密;

    4)監控;

    對於日誌的解決方案一般分為:日誌搜尋、格式化分析、全文檢索、風險告警; 

  三、為什麼要學習ElasticSearch?

  根據DB Engine的排名顯示,ElasticSearch是最受歡迎的企業級搜尋引擎。根據https://db-engines.com/en/ranking網站排名可知,比較靠前的有三家大資料搜尋引擎公司,除了ElasticSearch,還有Splunk和Solr。其中Solr也是基於Lucene。

  

  1、在當前軟體行業中,搜尋是一個軟體系統或平臺的基本功能, 學習ElasticSearch就可以為相應的軟體打造出良好的搜尋體驗。

  2、其次,ElasticSearch具備非常強的大資料分析能力。雖然Hadoop也可以做大資料分析,但是ElasticSearch的分析能力非常高,具備Hadoop不具備的能力。比如有時候用Hadoop分析一個結果,可能等待的時間比較長。

  3、ElasticSearch可以很方便的進行使用,可以將其安裝在個人的膝上型電腦,也可以在生產環境中,將其進行水平擴充套件。

  4、國內比較大的網際網路公司都在使用,比如小米、滴滴、攜程等公司。另外,在騰訊雲、阿里雲的雲平臺上,也都有相應的ElasticSearch雲產品可以使用。

  5、在當今大資料時代,掌握近實時的搜尋和分析能力,才能掌握核心競爭力,洞見未來。(漲工資) 

  四、學習ElasticSearch的入手層面

  1、開發層面

    1)瞭解ElasticSearch有基本功能;2)底層分散式工作原理;3)針對資料進行資料建模;

  2、運維層面

    1)進行叢集的容量規劃;2)對叢集進行滾動升級;3)對效能的優化;4)出現問題後,對問題的診斷與解決;

  3、方案層面

    1)學習ElasticSearch後,可以針對實際情況,解決搜尋的相關問題;2)可以將ELK運用到大資料分析場景中; 

  五、ElasticSearch的主要功能及應用場景

  1、主要功能:

    1)、海量資料的分散式儲存以及叢集管理,達到了服務與資料的高可用以及水平擴充套件;

    2)、近實時搜尋,效能卓越。對結構化、全文、地理位置等型別資料的處理;

    3)、海量資料的近實時分析(聚合功能)

  2、應用場景:

    1)網站搜尋、垂直搜尋、程式碼搜尋;

    2)日誌管理與分析、安全指標監控、應用效能監控、Web抓取輿情分析; 

  六、Elastic Stack的生態圈

  

  從上圖中可以看到,ElasticSearch做為ELK中的核心部分,它起到了資料儲存的作用。而Kibana在上層可以為使用者提供一個視覺化的介面。Logstash和Beats可以將各種各樣的資料進行抓取和收集。

在右側的X-Pack部分,是Elastic公司所提供的幾種收費服務,同時Elastic公司也提供雲的解決方案。 

  七、ElasticSearch與DB的整合

  

  針對上圖,可以分為兩種情況:

  1、將ElasticSearch當成資料庫來儲存資料,好處是架構比較簡單;

  2、若資料更新比較頻繁,同時需要考慮資料事務性時,應該先將資料存入資料庫,然後建立一個合適的同步機制,將資料同步到ElasticSearch中; 

  八、ELK在資料指標收集,日誌分析的架構設計

  

  從上圖中可以知道,通過Beats或者程式來進行資料方面的收集,當收集的資料量較大時,需要加入一層(Redis、Kafka、RabbitMQ)進行資料緩衝,然後將資料送入Logstash進行聚合及資料處理,最後通後ElasticSearch進行分詞、建立索引並存儲,通過Kibana或者Grafana這類圖形化工具進行資料的視覺化和資料分析。

 

  知識學習來源:《Elasticsearch核心技術與實