Elasticsearch的數(shù)據(jù)寫入過程

簡單的寫入過程流程圖

1、過程

備注:可以先看看《Direct I/O 與 Buffer I/O》會更好理解本文
(1)數(shù)據(jù)在被node寫入以后,不會直接被寫入到磁盤,而是先寫到一塊index buffer的內(nèi)存中,同時寫入translog文件(參數(shù)控制直接寫盤還是寫page cache)。在index buffer中的數(shù)據(jù)達(dá)到閾值以后,會觸發(fā)reflush操作將數(shù)據(jù)寫入到segment file。
(2)在translog file中的數(shù)據(jù)量達(dá)到一定閾值以后,會觸發(fā)flush操作,清空translog,生成commit point文件。
備注:ES通過寫入SegmentFile再M(fèi)erge的方式寫數(shù)據(jù),主要是為了順序?qū)?,并且無鎖。

2、概念

(1)refresh:觸發(fā)數(shù)據(jù)從index buffer中寫入到page cache,清空index buffer里面的數(shù)據(jù)。
(2)flush:An Elasticsearch flush is the process of performing a Lucene commit and starting a new translog。即,觸發(fā)refresh,刪除舊的translog file,防止translog file太大節(jié)點(diǎn)宕機(jī)要恢復(fù)的話會需要很久;生成commit point
(3)commit point:記錄每個index的所有segment(已經(jīng)被fsync以后的數(shù)據(jù),不包括在page cache的部分)。segment在merge的時候也會更新這個文件
(4)index buffer:內(nèi)存緩沖區(qū)。一個node只有一塊index buffer,所有shard共用。數(shù)據(jù)會在index buffer中排序、壓縮。
(5)translog:shard級別,一個translog對應(yīng)一個shard。

3、數(shù)據(jù)完整性以及故障恢復(fù)

數(shù)據(jù)被寫入到index buffer中的時候,如果發(fā)生trash,此時數(shù)據(jù)沒有被持久化的數(shù)據(jù)會丟失?;趖ranlog的機(jī)制,node在恢復(fù)的時候,會從translog文件恢復(fù)那些數(shù)據(jù)(如果不是選擇從page cache同步寫入到file的機(jī)制,其實(shí)也是會丟掉{index.translog.sync_interval}的數(shù)據(jù))

4、參數(shù)

參數(shù) 備注
index.translog.durability request:每次請求page cache中的數(shù)據(jù)都fsync到磁盤中(同步寫)。async:{index.translog.sync_interval}時間會fsync一次到磁盤。Elasticsearch v2.0以后默認(rèn)是request模式,如果能接受少量數(shù)據(jù)的丟失,可以選擇async
index.translog.sync_interval page cache中的數(shù)據(jù)多久fsync到translog file,默認(rèn)5s
index.translog.flush_threshold_size 控制translog file觸發(fā)flush的閾值。默認(rèn)512MB。調(diào)大這個閾值能減少merge次數(shù),但是增加recovery的時間。
index.translog.retension.size 同上
index.translog.retension.age 同上
indices.memory.index_buffer_size 決定了index buffer的大小,默認(rèn)是10%,即10%的heap大小。index buffer大小是全局配置,無法為每個index配置
index.refresh_interval 決定了refresh的頻率,默認(rèn)是1s,可以設(shè)置為-1,等到index buffer滿了以后再觸發(fā)refresh。index級別的配置,可單獨(dú)為每個index配置

reference

圖解elasticsearch的寫入流程(包含對refresh、fsync、flush操作的理解)
Elasticsearch translog文件介紹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容