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