elasticsearch學習筆記(一)-elasticsearch相關(guān)概念

ElasticSearch

elasticsearch簡介

  • elasticsearch是一個基于Lucene庫的分布式凌唬,支持多租戶的全文搜索引擎并齐,也是數(shù)據(jù)分析引擎。

  • elasticsearch是由java開發(fā)實現(xiàn)的客税。

  • elasticsearch提供了REST接口和JSON文檔况褪,可以被任何編程語言調(diào)用

  • elasticsearch可以進行近實時搜索和分析任何類型的數(shù)據(jù),無論是結(jié)構(gòu)化數(shù)據(jù)更耻,半結(jié)構(gòu)化數(shù)據(jù)测垛,非結(jié)構(gòu)化數(shù)據(jù)。elasticsearch都可以高效地進行存儲和快速搜索秧均。

  • 高性能食侮,高可用(數(shù)據(jù),服務(wù))目胡,可水平擴展锯七,易用

  • 支持不同節(jié)點類型

elasticsearch的應(yīng)用場景

  • 在應(yīng)用程序或網(wǎng)站上添加搜索功能

  • 存儲和分析日志、指標和安全事件數(shù)據(jù)

  • 使用機器學習來實時自動建模數(shù)據(jù)的行為

  • 使用Elasticsearch作為存儲引擎來自動化業(yè)務(wù)工作流

  • 使用Elasticsearch作為地理信息系統(tǒng)(GIS)管理誉己、集成和分析空間信息

  • 使用Elasticsearch作為生物信息學研究工具存儲和處理遺傳數(shù)據(jù)

elasticsearch家族

elasticsearch的生態(tài)圈

  • logstash和beats用于數(shù)據(jù)抓取

  • elasticsearch用于數(shù)據(jù)的存儲起胰,分析,計算

  • kibana用于數(shù)據(jù)可視化

  • x-pack主要是商業(yè)用途巫延,如安全效五,監(jiān)控,告警炉峰,圖查詢畏妖,機器學習等。

logstash

簡介
  • 開源的服務(wù)端數(shù)據(jù)處理管道疼阔,支持從不同來源采集數(shù)據(jù)戒劫,轉(zhuǎn)換數(shù)據(jù),并將數(shù)據(jù)發(fā)送到不同的存儲庫中婆廊。

  • 最初用于日志的采集和處理迅细。

特性
  • 實時解析和轉(zhuǎn)換數(shù)據(jù)

  • 可擴展

    • 支持200多個插件(日志,數(shù)據(jù)庫淘邻,Arcsigh茵典,Netflow)
  • 可靠性,安全性

    • logstash會通過持久化隊列來保證至少將運行中的事件送達一次

    • 數(shù)據(jù)傳輸加密

  • 監(jiān)控

kibana

簡介
  • Kiwi fruit + Banana

  • 數(shù)據(jù)可視化工具宾舅,幫助用戶解開對數(shù)據(jù)的任何疑問

  • 基于Logstash的工具

elk-stack.png

Beats層主要負責收集數(shù)據(jù)统阿,可以直接存儲到elastic search彩倚,也可以交給logstash進行解析過濾等處理操作,再存儲到elastic search扶平,elasticsearch就是存儲引擎帆离,提供api用于搜索數(shù)據(jù),分析數(shù)據(jù)等操作结澄,kibana與elasticsearch進行可視化交互哥谷。

elasticsearch的基本概念

Document

  • elasticsearch是面向document的,document是一個可被索引的基礎(chǔ)信息單元

  • document會被序列化成json格式麻献,保存在elasticsearch中

    • json對象由字段(field)組成

    • 每個字段都有對應(yīng)的字段類型们妥,如:字符串/數(shù)值/布爾/日期/二進制/范圍類型

    • json文檔,格式靈活赎瑰,不需要預(yù)先定義格式

    • 字段類型可以指定或者通過elasticsearch自動推算

    • 支持數(shù)據(jù)王悍,支持嵌套json

  • 每個document都有一個unique id

    • 可以自己指定id

    • elasticsearch自動生成

Document MetaData
 "_index" : "movies",
 "_type" : "_doc",
 "_id" : "37475",
 "_score" : 1.0,
 "_source" : {
 "genre" : [
 "Drama"
 ],
 "id" : "37475",
 "year" : 2005,
 "title" : "Unfinished Life, An",
 "@version" : "1"
 }
}

document metaData主要用于標注文檔的相關(guān)信息

  • _index: document所屬的index

  • _type: document所屬的type破镰,現(xiàn)基本都為_doc

  • _id: document unique id

  • _source: json文檔內(nèi)容

  • @version: document version

  • _score: 相關(guān)性打分

Index

  • index是document的容器餐曼,是一類document的結(jié)合

  • 每個索引都有自己的mapping定義,用于定義包含的文檔的字段名和字段類型

  • 索引中的數(shù)據(jù)分散在Shard上鲜漩,可以通過setting定義不同的數(shù)據(jù)分布

// index settings
{
 "settings":
 {
 "index":
 {
 "creation_date": "1624690171977",
 "number_of_shards": "1",
 "number_of_replicas": "1",
 "uuid": "HqFyAwvOQ8Ctfwy7Cbwz-A",
 "version":
 {
 "created": "7090299"
 },
 "provided_name": "movies"
 }
 }
}


// index mapping
{
 "mappings": {
 "_doc": {
 "properties": {
 "@version": {
 "type": "text",
 "fields": {
 "keyword": {
 "type": "keyword",
 "ignore_above": 256
 }
 }
 },
 "genre": {
 "type": "text",
 "fields": {
 "keyword": {
 "type": "keyword",
 "ignore_above": 256
 }
 }
 },
 "id": {
 "type": "text",
 "fields": {
 "keyword": {
 "type": "keyword",
 "ignore_above": 256
 }
 }
 },
 "title": {
 "type": "text",
 "fields": {
 "keyword": {
 "type": "keyword",
 "ignore_above": 256
 }
 }
 },
 "year": {
 "type": "long"
 }
 }
 }
 }
}

Type

在一個索引中源譬,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區(qū)孕似,其語義完全由你來定踩娘。通常,會為具有一組相同字段的文檔定義一個類型喉祭。比如說养渴,我們假設(shè)你運營一個博客平臺 并且將你所有的數(shù)據(jù)存儲到一個索引中。在這個索引中泛烙,你可以為用戶數(shù)據(jù)定義一個類型理卑,為博客數(shù)據(jù)定義另一個類型,當然蔽氨,也可以為評論數(shù)據(jù)定義另一個類型藐唠。

需要注意的是:

  1. 在7.0之前,一個index可以設(shè)置多個types

  2. 6.0開始鹉究,Type已經(jīng)被Deprecated宇立。7.0開始,一個索引只能創(chuàng)建一個Type - _doc

  3. 8.0將會被徹底被廢棄

Cluster

  • 一個elasticsearch集群就是由一個或多個節(jié)點組織在一起自赔, 它們共同持有你全部的數(shù)據(jù)妈嘹, 并一起提供索引和搜索功能。

  • 一個集群由一個唯一的名字標識绍妨, 這個名字默認就是“elasticsearch”蟋滴。 不同的集群通過不同的名字來區(qū)分染厅,可以通過配置文件修改,也可以在啟動命令行中加上-E cluster.name=es_demo進行指定津函。

  • 保證了系統(tǒng)的高可用性

    • 服務(wù)高可用:允許有節(jié)點停止服務(wù)

    • 數(shù)據(jù)高可用:部分節(jié)點丟失肖粮,也不會丟失數(shù)據(jù)

  • 擴展性

    • 請求量/數(shù)據(jù)的不斷增長(將數(shù)據(jù)分布到所有節(jié)點上)

    • 水平擴展,增加節(jié)點尔苦,節(jié)點可以通過指定某個集群的名字涩馆,來加入這個集群

  • 集群的狀態(tài):

    • Green - Shard & Replica都正常分配

    • Yellow - Shard全部正常分配,Replica未能正常分配允坚。

    • Red - 有Shard未能正常分配魂那,例如當服務(wù)器的磁盤容量超過了85%時,去創(chuàng)建了一個新的索引稠项。

# 查看集群狀態(tài)
curl -i http://192.168.0.41:9200/_cluster/health
 "cluster_name": "es_demo",
 "status": "yellow",
 "timed_out": false,
 "number_of_nodes": 1,
 "number_of_data_nodes": 1,
 "active_primary_shards": 7,
 "active_shards": 7,
 "relocating_shards": 0,
 "initializing_shards": 0,
 "unassigned_shards": 1,
 "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": 87.5
}

Node

  • 節(jié)點是一個elasticsearch實例涯雅,其本質(zhì)也是一個java進程,一臺服務(wù)器上可以運行多個elasticsearch進程展运,通過修改port活逆,可以實現(xiàn),但是生產(chǎn)環(huán)境一般建議一臺機器上只運行一個elasticsearch實例拗胜。

  • 每個節(jié)點都有名字蔗候,通過配置文件配置,或者啟動的時候在命令行中加上-E node.name=node1指定

  • 每個節(jié)點在啟動后埂软,會分配一個unique id,保存在data目錄下锈遥。

  • 節(jié)點的分類有很多,不同的節(jié)點類型都有著不同的作用勘畔。

    • master node & master-eligible node

    • data node & coordinating node

    • Hot & warm node

    • machine learning node

    • tribe node

  • 開發(fā)環(huán)境中一個節(jié)點可以承擔多個角色所灸,但是在生產(chǎn)環(huán)境中,應(yīng)該設(shè)置單一的角色節(jié)點(dedicated node)

節(jié)點類型 配置參數(shù) 默認值
master-eligible node node.master true
data node node.data true
ingest node.ingest true
coordinating only 每個節(jié)點默認都是coordinating node炫七。設(shè)置其他類型全部為false爬立。
machine learning node.ml true(enable x-pack)
Master Node & Master-eligible Nodes
  • 每個節(jié)點啟動后,默認就是一個master eligible node诉字∨吵ⅲ可以通過配置文件設(shè)置node.master: false禁止。

  • master eligible node 可以參加選主流程壤圃,成為master node陵霉。

  • 當?shù)谝粋€節(jié)點啟動的時候,它會將自己選舉成master node伍绳。

  • 每個node上都保存了集群的狀態(tài)踊挠,只有master node才能修改集群的狀態(tài)信息

    • cluster state,維護了一個集群中的必要信息

      • 所有的node信息

      • 所有的索引和其相關(guān)的mapping與setting信息

      • 分片的路由信息

    • 任意節(jié)點都能修改信息會導(dǎo)致數(shù)據(jù)的不一致性

Data Node & Coordinating Node
  • 可以保存數(shù)據(jù)的節(jié)點,叫做data node效床。負責保存分片數(shù)據(jù)睹酌,在數(shù)據(jù)擴展上起到了至關(guān)重要的作用。

  • Coordinating node負責接受client的請求剩檀,將請求分發(fā)到合適的節(jié)點憋沿,最終把結(jié)果匯集到一起。

  • 每個節(jié)點默認都起到了coordinating node的職責沪猴。

Hot & Warm Node
  • 不同硬件配置的data node辐啄,可以用來實現(xiàn)hot & warm架構(gòu),降低集群部署的成本运嗜。
Machine Learning Node
  • 負責跑ml的job壶辜,用來做異常檢測。
Tribe Node
  • Tribe node 連接到不同的es集群担租,并且支持將這個集群當成一個獨立的集群處理砸民。

Shard & Replica

  • Shard,用于解決數(shù)據(jù)水平擴展的問題奋救。通過分片岭参,可以將數(shù)據(jù)分布到集群內(nèi)的所有節(jié)點上。

    • 一個分片是一個運行的lucene的實例

    • 分片數(shù)在索引創(chuàng)建的時候通過number_of_shards指定菠镇,后續(xù)不允許修改冗荸,除非reindex

  • Replica承璃,用于解決數(shù)據(jù)高可用的問題利耍,是分片的拷貝。

    • Replica數(shù)可以動態(tài)調(diào)整盔粹,通過number_of_replicas指定

    • 增加replica隘梨,還可以在一定程度上提高服務(wù)的高可用性。

  • 對于生產(chǎn)環(huán)境中的分片的設(shè)定舷嗡,需要提前做好容量規(guī)劃

    • 分片數(shù)設(shè)置的過小

      • 導(dǎo)致后續(xù)無法增加節(jié)點實現(xiàn)水平擴展

      • 單個分片的數(shù)據(jù)量太大轴猎,導(dǎo)致數(shù)據(jù)重新分配耗時。

    • 分片數(shù)設(shè)置的過大进萄,默認主分片設(shè)置成1捻脖,解決了over-sharding的問題

      • 影響搜索結(jié)果的相關(guān)性打分,影響統(tǒng)計結(jié)果的準確性中鼠。

      • 單個節(jié)點上過多的分片可婶,會導(dǎo)致資源的浪費,同時也會影響性能援雇。

elasticsearch vs rdbms

RDBMS ElasticSearch
Table Index
Row Document
Column Field
Schema Mapping
SQL DSL

elasticsearch高性能的全文檢索矛渴,不支持事務(wù),不支持JOIN

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惫搏,一起剝皮案震驚了整個濱河市具温,隨后出現(xiàn)的幾起案子蚕涤,更是在濱河造成了極大的恐慌,老刑警劉巖铣猩,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖铜,死亡現(xiàn)場離奇詭異,居然都是意外死亡达皿,警方通過查閱死者的電腦和手機蛮位,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳞绕,“玉大人失仁,你說我怎么就攤上這事∶呛危” “怎么了萄焦?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冤竹。 經(jīng)常有香客問我拂封,道長,這世上最難降的妖魔是什么鹦蠕? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任冒签,我火速辦了婚禮,結(jié)果婚禮上钟病,老公的妹妹穿的比我還像新娘萧恕。我一直安慰自己,他們只是感情好肠阱,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布票唆。 她就那樣靜靜地躺著,像睡著了一般屹徘。 火紅的嫁衣襯著肌膚如雪走趋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天噪伊,我揣著相機與錄音簿煌,去河邊找鬼。 笑死鉴吹,一個胖子當著我的面吹牛姨伟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拙寡,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼授滓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起般堆,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤在孝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淮摔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體私沮,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年和橙,在試婚紗的時候發(fā)現(xiàn)自己被綠了仔燕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡魔招,死狀恐怖晰搀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情办斑,我是刑警寧澤外恕,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站乡翅,受9級特大地震影響鳞疲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蠕蚜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一尚洽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靶累,春花似錦腺毫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽争舞。三九已至凛忿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竞川,已是汗流浹背店溢。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留委乌,地道東北人床牧。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像遭贸,于是被迫代替她去往敵國和親戈咳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容