漸入佳境,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 的安裝
-
在安裝前首先需要檢視當前的 JDK 支援的 ES 版本,
-
然後前往Elastic
./bin/elasticsearch
./bin/kibana
-
啟動成功後,訪問
http://localhost:5601
就能訪問 Kibana 的視覺化頁面。
如果需要把 Kibana 的介面配置成中文,可在 config/kibana.yml 中配置命令:i18n.locale: "zh-CN"
操作 ElasticSearch
通常使用 REST 介面來對 Elasticsearch 進行操作,可以使用kibana開發工具進行操作:
可以通過HTTP:GET、POST、PUT、DELETE、PATCH
命令進行介面請求,對 ES 進行操作。