ES中Refresh和Flush的區(qū)別

image.png
整體流程:
  1. 數(shù)據(jù)寫入buffer緩沖和translog日志文件中。
    當(dāng)你寫一條數(shù)據(jù)document的時候魂挂,一方面寫入到mem buffer緩沖中,一方面同時寫入到translog日志文件中。
  2. buffer滿了或者每隔1秒(可配)旷赖,refresh將mem buffer中的數(shù)據(jù)生成index segment文件并寫入os cache辅髓,此時index segment可被打開以供search查詢讀取泣崩,這樣文檔就可以被搜索到了(注意,此時文檔還沒有寫到磁盤上)洛口;然后清空mem buffer供后續(xù)使用矫付。可見第焰,refresh實現(xiàn)的是文檔從內(nèi)存移到文件系統(tǒng)緩存的過程买优。
  3. 重復(fù)上兩個步驟,新的segment不斷添加到os cache挺举,mem buffer不斷被清空杀赢,而translog的數(shù)據(jù)不斷增加,隨著時間的推移湘纵,translog文件會越來越大脂崔。
  4. 當(dāng)translog長度達到一定程度的時候,會觸發(fā)flush操作梧喷,否則默認每隔30分鐘也會定時flush砌左,其主要過程:
    4.1. 執(zhí)行refresh操作將mem buffer中的數(shù)據(jù)寫入到新的segment并寫入os cache,然后打開本segment以供search使用铺敌,最后再次清空mem buffer汇歹。
    4.2. 一個commit point被寫入磁盤,這個commit point中標(biāo)明所有的index segment适刀。
    4.3. filesystem cache(os cache)中緩存的所有的index segment文件被fsync強制刷到磁盤os disk秤朗,當(dāng)index segment被fsync強制刷到磁盤上以后,就會被打開笔喉,供查詢使用取视。
    4.4. translog被清空和刪除硝皂,創(chuàng)建一個新的translog。
refresh

最原始的ES版本里作谭,必須等待fsync將segment刷入磁盤稽物,才能將segment打開供search使用,這樣的話折欠,從一個document寫入到它可以被搜索贝或,可能會超過一分鐘,主要瓶頸是在fsync實際發(fā)生磁盤IO寫數(shù)據(jù)進磁盤锐秦,是很耗時的咪奖,這就不是近實時的搜索了。為此酱床,引入refresh操作的目的是提高ES的實時性羊赵,使添加文檔盡可能快的被搜索到,同時又避免頻繁fsync帶來性能開銷扇谣,依靠的原理就是文件系統(tǒng)緩存OS cache里緩存的文件可以被打開(open/reopen)和讀取昧捷,而這個os cache實際是一塊內(nèi)存區(qū)域,而非磁盤罐寨,所以操作是很快的靡挥。

寫入流程改進:
1)數(shù)據(jù)寫入到內(nèi)存buffer隊列中
2)每隔一定時間,buffer中的數(shù)據(jù)被寫入segment文件鸯绿,然后先寫入os cache
3)只要segment數(shù)據(jù)寫入os cache跋破,那就直接打開segment供search使用,而不必調(diào)用fsync將segment刷新到磁盤

將緩存數(shù)據(jù)生成segment后刷入os cache楞慈,并被打開供搜索的過程就叫做refresh幔烛,默認每隔1秒。也就是說囊蓝,每隔1秒就會將buffer中的數(shù)據(jù)寫入一個新的index segment file饿悬,先寫入os cache中。所以聚霜,es是近實時的狡恬,輸入寫入到os cache中可以被搜索,默認是1秒蝎宇,所以從數(shù)據(jù)插入到被搜索到弟劲,最長是1秒(可配)。

flush操作與translog

但是姥芥,需要注意兔乞, index segment刷入到os cache后就可以打開供查詢,這個操作是有潛在風(fēng)險的,因為os cache中的數(shù)據(jù)有可能在意外的故障中丟失庸追,而此時數(shù)據(jù)必備并未刷入到os disk霍骄,此時數(shù)據(jù)丟失將是不可逆的,這個時候就需要一種機制淡溯,可以將對es的操作記錄下來读整,來確保當(dāng)出現(xiàn)故障的時候,已經(jīng)落地到磁盤的數(shù)據(jù)不會丟失咱娶,并在重啟的時候可以從操作記錄中將數(shù)據(jù)恢復(fù)過來米间。elasticsearch提供了translog來記錄這些操作,結(jié)合os cached segments數(shù)據(jù)定時落盤來實現(xiàn)數(shù)據(jù)可靠性保證(flush)膘侮。

當(dāng)向elasticsearch發(fā)送創(chuàng)建document文檔添加請求的時候屈糊,document數(shù)據(jù)會先進入到buffer,與此同時會將操作記錄在translog之中喻喳,當(dāng)發(fā)生refresh時(數(shù)據(jù)從index buffer中進入filesystem cache的過程)translog中的操作記錄并不會被清除另玖,而當(dāng)數(shù)據(jù)從os cache中被寫入磁盤之后才會將translog中清空。這個將os cache的索引文件(segment file)持久化到磁盤的過程就是flush表伦,flush之后,這段translog的使命就完成了慷丽,因為segment已經(jīng)寫入磁盤蹦哼,就算故障也可以從磁盤的segment文件中恢復(fù)。flush的時機可能是1.定時flush要糊;2.translog大小達到閾值纲熏;3.一些重要操作;4.指令觸發(fā)。

translog記錄的是已經(jīng)在內(nèi)存生成(segments)并存儲到os cache但是還沒寫到磁盤的那些索引操作(注意锄俄,有一種解釋說局劲,添加到buffer中但是沒有被存入segment中的數(shù)據(jù)沒有被記錄到translog中,這依賴于寫translog的時機奶赠,不同版本可能有變化鱼填,不影響理解),此時這些新寫入的數(shù)據(jù)可以被搜索到毅戈,但是當(dāng)節(jié)點掛掉后這些未來得及落入磁盤的數(shù)據(jù)就會丟失苹丸,可以通過trangslog恢復(fù)。

當(dāng)然translog本身也是磁盤文件苇经,頻繁的寫入磁盤會帶來巨大的IO開銷赘理,因此對translog的追加寫入操作的同樣操作的是os cache,因此也需要定時落盤(fsync)扇单。translog落盤的時間間隔直接決定了ES的可靠性商模,因為宕機可能導(dǎo)致這個時間間隔內(nèi)所有的ES操作既沒有生成segment磁盤文件,又沒有記錄到Translog磁盤文件中,導(dǎo)致這期間的所有操作都丟失且無法恢復(fù)施流。

translog的fsync是ES在后臺自動執(zhí)行的凉倚,默認是每5秒鐘主動進行一次translog fsync,或者當(dāng)translog文件大小大于512MB主動進行一次fsync嫂沉,對應(yīng)的配置是index.translog.flush_threshold_period 和 index.translog.flush_threshold_size稽寒。還需指出的是, 從ES2.0開始趟章,每次index杏糙、bulk、delete蚓土、update完成的時候也會觸發(fā)translog flush宏侍,當(dāng)flush到磁盤成功后才給請求端返回 200 OK。這個改變提高了數(shù)據(jù)安全性蜀漆,但是會對寫入的性能造成不小的影響谅河,因此在可靠性要求不十分嚴(yán)格且寫入效率優(yōu)先的情況下,可以在 index template 里設(shè)置如下參數(shù):"index.translog.durability":"async"确丢,這相當(dāng)于關(guān)閉了index绷耍、bulk等操作的同步flush translog操作,僅使用默認的定時刷新鲜侥、文件大小閾值刷新的機制褂始,同時可以調(diào)高 "index.translog.sync_interval":30s (默認是5s)和index.translog.flush_threshold_size配置選項。

總結(jié)一下translog的功能:
  • 保證在filesystem cache中的數(shù)據(jù)不會因為elasticsearch重啟或是發(fā)生意外故障的時候丟失描函。
  • 當(dāng)系統(tǒng)重啟時會從translog中恢復(fù)之前記錄的操作崎苗。
  • 當(dāng)對elasticsearch進行CRUD操作的時候,會先到translog之中進行查找舀寓,因為tranlog之中保存的是最新的數(shù)據(jù)胆数。
  • translog的清除時間時進行flush操作之后(將數(shù)據(jù)從filesystem cache刷入disk之中)。
總結(jié)一下flush操作的時間點:
  • es的各個shard會每個30分鐘進行一次flush操作互墓。
  • 當(dāng)translog的數(shù)據(jù)達到某個上限的時候會進行一次flush操作必尼。
有關(guān)于translog和flush的一些配置項:
  • index.translog.flush_threshold_ops:當(dāng)發(fā)生多少次操作時進行一次flush。默認是 unlimited轰豆。
  • index.translog.flush_threshold_size:當(dāng)translog的大小達到此值時會進行一次flush操作胰伍。默認是512mb。
  • index.translog.flush_threshold_period:在指定的時間間隔內(nèi)如果沒有進行flush操作酸休,會進行一次強制flush操作骂租。默認是30m。
  • index.translog.interval:多少時間間隔內(nèi)會檢查一次translog斑司,來進行一次flush操作渗饮。es會隨機的在這個值到這個值的2倍大小之間進行一次操作但汞,默認是5s。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互站,一起剝皮案震驚了整個濱河市私蕾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胡桃,老刑警劉巖踩叭,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翠胰,居然都是意外死亡容贝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門之景,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斤富,“玉大人,你說我怎么就攤上這事锻狗÷Γ” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵轻纪,是天一觀的道長油额。 經(jīng)常有香客問我,道長桐磁,這世上最難降的妖魔是什么悔耘? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮我擂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缓艳。我一直安慰自己校摩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布阶淘。 她就那樣靜靜地躺著衙吩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溪窒。 梳的紋絲不亂的頭發(fā)上坤塞,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音澈蚌,去河邊找鬼摹芙。 笑死,一個胖子當(dāng)著我的面吹牛宛瞄,可吹牛的內(nèi)容都是我干的浮禾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盈电!你這毒婦竟也來了蝴簇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匆帚,失蹤者是張志新(化名)和其女友劉穎熬词,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吸重,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡互拾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晤锹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摩幔。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞭铆,靈堂內(nèi)的尸體忽然破棺而出或衡,到底是詐尸還是另有隱情,我是刑警寧澤车遂,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布封断,位于F島的核電站,受9級特大地震影響舶担,放射性物質(zhì)發(fā)生泄漏坡疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一衣陶、第九天 我趴在偏房一處隱蔽的房頂上張望柄瑰。 院中可真熱鬧,春花似錦剪况、人聲如沸教沾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授翻。三九已至,卻和暖如春孙咪,著一層夾襖步出監(jiān)牢的瞬間堪唐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工翎蹈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淮菠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓杨蛋,卻偏偏與公主長得像兜材,于是被迫代替她去往敵國和親理澎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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