1. 程式人生 > 其它 >漸入佳境,ElasticSearch 深入理解與實踐

漸入佳境,ElasticSearch 深入理解與實踐

作者:幻好

來源:恆生LIGHT雲社群

上期介紹了 ElasticSearch 的基本概念,本期對 ElasticSearch 的核心原理進行深入理解,並進行實踐。(上期入口)

基本概念

Near Realtime(接近實時)

ES 是一個近乎實時的搜尋引擎,這意味著從索引文件到可搜尋文件之間只有一個輕微的延遲,預設通常是一秒。

ES 寫入資料時,會先寫到一個記憶體bufferr中去,但此時是搜不到該資料的,然後預設每隔一秒會刷到系統快取中,等快取中刷入資料後,才能從 ES 中搜索。

Cluster(叢集)

群集是一個或多個節點的集合,它們一起儲存整個資料,並提供跨所有節點的聯合索引和搜尋功能。每個群集都有自己的唯一群集名稱,節點通過名稱加入群集。

Node(節點)

節點是指屬於叢集的單個 ES 例項,儲存資料並參與叢集的索引和搜尋功能。可以將節點配置為按叢集名稱加入特定叢集,預設情況下,可以在 config/elasticsearch.yml 裡定製我們的叢集的名字。在實際的部署中,大多數情況還是需要一個 server 上執行一個 node。

在整個 Elastic 的架構中,Data Node 和 Cluster 的關係表述如下:

Document(文件)

ES 中索引和搜尋的最小資料單元是文件,文件是可被索引的基本資訊單位,通常以JSON形式表示。

Document 類似於 MySql 中行記錄的概念。

Type(型別)

型別是文件的邏輯容器,類似於表是行的容器。

通常,為具有一組公共欄位的文件型別,類似MySql中表的概念。

(在Elasticsearch 6.0.0及更高的版本中,一個索引只能包含一個型別。)

Index(索引)

索引是一些具有相似特徵的文件集合,每個 Index 一個或許多的 documents 組成,並且這些 document 可以分佈於不同的 shard 之中。

Shards(分片)

當索引儲存大量資料時,可能會超出單個節點的硬體限制,為了解決這個問題,Elasticsearch提供了將索引細分為分片的概念。

分片機制賦予了索引水平擴容的能力、並允許跨分片分發和並行化操作,從而提高效能和吞吐量。

Replicas(副本)

ES 預設為每個索引建立一個主分片和一個副本。這意味著每個索引將包含一個主分片,每個分片將具有一個副本。

在可能出現故障的網路環境中,需要有一個故障切換機制,副本在某些節點失效的情況下提供高可用性。

Inverted index(倒排索引)

反向索引是 ES 和任何其他支援全文搜尋的系統的核心資料結構,顧名思義就是通過Value去找key。

當一段文字從最原始的文字匯入到 Elasticsearch 中,需要經過一個叫做 indexing 的過程。

ElasticSearch 的壓縮演算法

LZ4 是ElasticSearch資料儲存的預設編碼(壓縮)方式,LZ4 具有更快的壓縮與解壓速度,通過 index.codec來設定。

什麼是ELK?

ElasticSearch 通常不是單獨使用,通常是 ElasticSearch+Logstash+Kibana (ELK) 配合使用。

L是 Logstash ,Logstash 是一個開源資料收集引擎,具有實時管道功能。Logstash可以動態地將來自不同資料來源的資料統一起來,並將資料標準化到你所選擇的目的地。

K就是 Kibana ,Kibana 是一個針對Elasticsearch的開源分析及視覺化平臺,用來搜尋、檢視互動儲存在Elasticsearch索引中的資料。使用Kibana,可以通過各種圖表進行高階資料分析及展示。

ElasticSearch 和 Kibana 的安裝

  1. 在安裝前首先需要檢視當前的 JDK 支援的 ES 版本,參考地址

  1. 然後前往Elastic官網下載需要的版本的軟體包,下載後解壓,執行bin中指令碼啟動 ES 和 Kibana。

./bin/elasticsearch
./bin/kibana
  1. 啟動成功後,訪問http://localhost:5601 就能訪問 Kibana 的視覺化頁面。

如果需要把 Kibana 的介面配置成中文,可在 config/kibana.yml 中配置命令:i18n.locale: "zh-CN"

操作 ElasticSearch

通常使用 REST 介面來對 Elasticsearch 進行操作,可以使用kibana開發工具進行操作:

可以通過HTTP:GET、POST、PUT、DELETE、PATCH 命令進行介面請求,對 ES 進行操作。