Java中Elasticsearch的核心概念詳解
節(jié)點
- 每個Elasticsearch節(jié)點實際上就是一個Java進程,就是一個Elasticsearch的實例。
- 一個節(jié)點 ≠一臺服務器,也就是說我可以在一臺服務器上啟動多個Elasticsearch實例。
角色
集群節(jié)點角色可以在配置文件elasticsearch.yml中通過node.roles配置,如果配置了節(jié)點角色,那么該節(jié)點將只會執(zhí)行配置的角色功能。
master:候選節(jié)點
所謂master節(jié)點,就是在主節(jié)點down機的時候,可以參與選舉,取而代之的節(jié)點。
舉個例子:主節(jié)點好比班長,在班長不在的時候(主節(jié)點down機了),要選舉出一個臨時班長(master中選舉)。
master節(jié)點不僅有選舉權還有被選舉權。每個master節(jié)點主要負責索引創(chuàng)建、索引刪除、追蹤節(jié)點信息和決定分片分配節(jié)點等。
配置節(jié)點(下面節(jié)點配置方法同):
node.roles: [ master ]
data:數據節(jié)點
數據節(jié)點顧名思義就是存放數據的節(jié)點,數據節(jié)點負責存儲文檔數據和數據的CRUD操作。
因此該節(jié)點是CPU和IO密集型,需要實時監(jiān)控該節(jié)點資源信息,以免過載。
數據節(jié)點又分為:data_content,data_hot,data_warm,data_code。
- data_content:數據內容節(jié)點,目錄節(jié)點負責存儲常量數據,且不隨著時間的推移,改變數據的溫層(hot、warm、cold)。且該節(jié)點的查詢優(yōu)先級是高于其它IO操作,所以該節(jié)點search和aggregations都會較快一些。
- data_hot:熱節(jié)點,保存熱數據,經常會被訪問,用于存儲最近頻繁搜索和修改的時序數據。
- data_code:冷節(jié)點,保存冷數據,很少會被訪問,當數據不再更新,那么可以將該數據移動到冷數據節(jié)點;冷數據節(jié)點用于存儲只讀,且訪問頻率較低的數據。該節(jié)點機器性能可以低一點。
- data_warm:溫節(jié)點,介于熱節(jié)點和冷節(jié)點之間(溫節(jié)點是我自己翻譯的),當數據訪問頻率下降,可以將其移動到溫節(jié)點,溫節(jié)點用于存儲修改較少,但仍然有查詢的數據。查詢的頻率肯定比熱點節(jié)點要少。
Ingest:預處理節(jié)點
作用類似于Logstash中的Filter,Ingest其實就是管道的入口節(jié)點,比如說我們在做日志分析的時候,可以把日志輸出的數據交給預處理節(jié)點做預處理。
ml:機器學習節(jié)點
機器學習節(jié)點負責處理機器學習相關請求。
remote_ cluster_ client:候選客戶端節(jié)點
遠程候選節(jié)點可以作為遠程集群的客戶端,主要負責搜索遠程集群數據和同步兩個集群間數據。
transform:轉換節(jié)點
轉換節(jié)點會進行一種特殊操作,通過特定聚集語句計算,然后將結果寫到新的索引中。
voting_ only:僅投票節(jié)點
在master選舉過程中,僅投票節(jié)點顧名思義就是僅僅投票,不會被選舉為master。
Coordinating only node:協(xié)調節(jié)點
協(xié)調節(jié)點主要負責根據集群狀態(tài)路由分發(fā)搜索,路由分發(fā)bulk操作。此外每個節(jié)點都是自帶協(xié)調節(jié)點功能。
分片
分片的思想在很多分布式應用和海量數據處理的場所非常常見,通常來說,面對海量數據的存儲,單個節(jié)點顯得力不從心。
通俗解釋,分片就是將數據拆分多份,放到不同的服務器節(jié)點。
Elasticsearch里的分片為為2種:主分片和副本分片。
Shards主分片
es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節(jié)點上。構成分布式搜索。
分片的數量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。這里和索引分片的算法有關,因為是通過取模算法去判斷分到哪,如果改變了就無法正常查詢之前的索引。
當客戶端發(fā)起創(chuàng)建document的時候,es需要確定這個document放在該index哪個shard上。這個過程就是數據路由。
路由算法:shard = hash(routing) % number_of_primary_shards。
這里的routing指的就是document的id,如果number_of_primary_shards在查詢的時候取余發(fā)生的變化,無法獲取到該數據。
Replicas副本分片
代表索引副本,es可以設置多個索引的副本,副本的作用一是提高系統(tǒng)的容錯性,當某個節(jié)點某個分片損壞或丟失時可以從副本中恢復。
二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。
- 一個索引包含一個或多個分片,在7.0之前默認五個主分片,每個主分片一個副本;在7.0之后默認一個主分片。副本可以在索引創(chuàng)建之后修改數量,但是主分片的數量一旦確定不可修改,只能創(chuàng)建索引。
- 每個分片都是一個Lucene實例,有完整的創(chuàng)建索引和處理請求的能力。
- ES會自動在nodes上做分片均衡。
- 一個doc不可能同時存在于多個主分片中,但是當每個主分片的副本數量不為一時,可以同時存在于多個副本中。
- 每個主分片和其副本分片不能同時存在于同一個節(jié)點上,所以最低的可用配置是兩個節(jié)點互為主備。
- 副本分片是不能直接寫入數據的,只能通過主分片做數據同步。
- 增減節(jié)點時,shard會自動在nodes中負載均衡。
集群
上面所說的節(jié)點角色構成了整個集群。
集群狀態(tài)
- Green:主/副分片都已經分配好且可用,集群處于最健康的狀態(tài)100%可用。
- Yellow:主分片可用,但是至少有一個副本是未分配的。這種情況下數據也是完整的,但是集群的高可用性會被弱化。
- Red:至少有一個不可用的主分片。此時只是部分數據可以查詢,已經影響到了整體的讀寫,需要重點關注。 健康值檢查
//查看集群健康狀況 _cat/health _cluster/health
返回參數說明
示例:
{
"cluster_name" : "elastic-log-xxx",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 24,
"number_of_data_nodes" : 21,
"active_primary_shards" : 27777,
"active_shards" : 27804,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
索引和文檔
es中索引類比為關系型數據庫中的Table
在7.0版本之前index由若干個type組成,type實際上是文檔的邏輯分類,而文檔是es存儲的最小單元。
7.0及之后弱化了type的概念,7.x版本index只有一個type:_doc。
文檔(doc)可以類比為關系型數據庫中的行,每個文檔都有一個文檔id。
到此這篇關于Java中Elasticsearch的核心概念詳解的文章就介紹到這了,更多相關Elasticsearch核心概念內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot+thymeleaf+mybatis實現甘特圖的詳細過程
這篇文章主要介紹了springboot+thymeleaf+mybatis實現甘特圖的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
Yml轉properties文件工具類YmlUtils的詳細過程(不用引任何插件和依賴)
這篇文章主要介紹了Yml轉properties文件工具類YmlUtils(不用引任何插件和依賴),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08

