1. 程式人生 > >ElasticSearch讀寫一致性問題

ElasticSearch讀寫一致性問題

ES寫過程

    1.ES會將document傳送給coordinate node,節點根據document資料路由到指定的節點,改節點包含該primary shard

    2.把文件儲存寫入到primary shard,如果設定了index.write.wait_for_active_shards=1,那麼寫完主節點,直接返回客戶端,如果 index.write.wait_for_active_shards=all,那麼必須要把所有的副本寫入完成才返回客戶端。詳情見官方文件:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/docs-index_.html#index-wait-for-active-shards

    3.如果index.write.wait_for_active_shards=1,那麼es會非同步的把主分片的資料同步到副本分片上去。(在此期間,可能會出現讀請求可能讀取不到最新資料的情況)

ES讀取過程

    1.客戶端傳送請求到任意一個 node,成為 coordinate node

    2. coordinate node將請求的查詢的條件,找到文件對應的分片和副本節點的地址

    3.隨機選擇一個節點,一般是輪詢,肯恩查詢主節點,可能查詢的是副本節點,然後將資料返回給coordinate node

    4.coordinate node將資料返回給客戶端。

   由於可能存在primary shard的資料還沒同步到 replica shard上的情況,所以客戶端可能查詢到舊的資料,我們可以做相應的調整,保證讀取到最新的資料。

      方案1: 設定查詢的時候只查主分片 preference=_primary ,詳情見 https://www.elastic.co/guide/en/elasticsearch/reference/6.4/search-request-preference.html 

GET /_search?preference=_primary
{
    "query": {
        "match": {
            "title": "elasticsearch"
        }
    }
}

    方案2:  執行 Update , Delete , Bulk 等操作時,裝置refresh策略,常見的有以下幾種,

    refresh=true,更新資料之後,立刻對相關的分片(包括副本) 重新整理。

    refresh=wait_for 這個引數表示,重新整理不會立刻進行,而是等待一段時間才重新整理 ( index.refresh_interval),預設時間是 1 秒

 enum RefreshPolicy implements Writeable {
        /**
         * Don't refresh after this request. The default.
         */
        NONE("false"),
        /**
         * Force a refresh as part of this request. This refresh policy does not scale for high indexing or search throughput but is useful
         * to present a consistent view to for indices with very low traffic. And it is wonderful for tests!
         */
        IMMEDIATE("true"),
        /**
         * Leave this request open until a refresh has made the contents of this request visible to search. This refresh policy is
         * compatible with high indexing and search throughput but it causes the request to wait to reply until a refresh occurs.
         */
        WAIT_UNTIL("wait_for");

ES寫入的底層流程

       如圖

        1.寫入的資料先寫入一個index_buffer的記憶體空間中,在index buffer中的資料無法被搜尋到,這是ES無法保證100%實時的原因, indices.memory.index_buffer_size配置該空間的大小。

        2.在寫入index_buffer之前,需要先記錄translog,translog用於記錄每次寫入的資料,在持久化失敗後,可用於資料恢復。

        3. index_buffer的空間被佔滿或者達重新整理間隔到了index.refresh_interval的值時,會重新整理的作業系統的filesystem cache中。

        4.filesystem cache中資料,也會在一定的時間間隔,flush到磁碟中,當重新整理到磁碟後,就會刪除對應的文件的translog中資料。

        

相關推薦

ElasticSearch一致性問題

ES寫過程     1.ES會將document傳送給coordinate node,節點根據docume

redis一致性遇到的問題

分析 redis 更新 數據不一致 除了 。。 請求 如何解決 問題分析 1、最初級的緩存不一致問題以及解決方案 問題:先修改數據庫,再刪除緩存,如果刪除緩存失敗了,那麽會導致數據庫中是新數據,緩存中是舊數據,數據出現不一致 解決思路 先刪除緩存,再修改數據庫,如果刪除緩存

Elasticsearch——文件

目錄 1.介紹 故障處理 故障處理 5.故障 1.介紹 Elasticsearch中的每一個索引都會被切片然後每一個切片都會有多份複製。 這些複製被稱作複製組,並且當文件被新增或移除時,複製組中的複製必須保證同步。 如果做不到這一點,從

第十篇 elasticsearch一致性原理以及quorum機制深入剖析

1. consistency引數:one(primary shard),all(all shard),quorum(default) 我們在傳送任何一個增刪改操作時比如put /index/type/id,都可以帶上一個consistency引數,指明我們想要

ElasticSearch原理

內存緩存 自己的 內存數據 Language ref elastic 緩沖 除了 itl es 寫入數據的工作原理是什麽啊?es 查詢數據的工作原理是什麽啊?底層的 lucene 介紹一下唄?倒排索引了解嗎? es 寫數據過程 客戶端選擇一個 no

剖析Elasticsearch集群系列第一篇 Elasticsearch的存儲模型和操作

推薦 arch 變更 git 排序。 _id 包含 doc 現在 剖析Elasticsearch集群系列涵蓋了當今最流行的分布式搜索引擎Elasticsearch的底層架構和原型實例。 本文是這個系列的第一篇,在本文中,我們將討論的Elasticsearch的底層存儲模型及

elasticsearch 冷熱數據的分離

prop 掛載 res arc ima 支持 enable hot ear 步驟 一、冷熱分離集群配置 比如三個機器共六個node的es集群。 每個機器上各掛載一個ssd 和 一個sata。每個機器需要啟動兩個es進程、每個進程對應不同類型的磁盤。 關鍵配置: node

Elasticsearch一致性在5.x版本之後已經被廢棄掉

1 問題緣由 最近繼續在探索es的更多內容,查閱了相關資料(包括部落格文章跟其它一些教程),學習到寫一致性原理的相關知識,其本身並不難理解,但是一定要在實踐中經過驗證才會有更深的體會,就像在專案過使用過es做各種聚合統計搜尋分析,跟沒使用過,差別還是很大的。於是在es 5.4的版本上進行測試: PUT m

ElasticSearch最佳入門實踐(三十)一致性原理以及quorum機制深入剖析

1、consistency,one(primary shard),all(all shard),quorum(default) 我們在傳送任何一個增刪改操作的時候,比如說put /index/type/id,都可以帶上一個consistency引數,指明我們想要的寫一致性是什

elasticsearch 筆記十: 一致性原理和quorum

consistency ,one (primary shard),all(all shard),quorum(default) put /index/type/id?consistency=quorum one  :要求這個寫操作,只要有一個primary shard 是

Elasticsearch文件模型實現原理

   ES系列基於ElasticSearch6.4.x版本。 1、簡介    ElasticSearch,每個索引被分成多個分片(預設每個索引5個主分片primary shard),每個分片又可以有多個

SparkElasticsearch

Spark讀寫Elasticsearch 版本說明 Spark:2.3.1 Elasticsearch: elasticsearch-6.4.0 1 Scala環境下Spark讀寫Elasticsearch 1.1 依賴包 1.1.1 Spark依賴

一致性記憶體訪問的

原文地址,譯文地址,譯者: 李傑聰,校對:鄭旭東 原文作者: Irina Calciu         Brown University        [email protected] Dave Dice          Oracle Labs             [ema

Elasticsearch叢集冷熱分離、分離【轉】

轉自:https://blog.csdn.net/jiao_fuyou/article/details/50511255 一、冷熱分離 二、讀寫分離 即使這樣處理後,hot叢集即使只有一兩資料,但是一般象log類資料,查詢的一般都是最近一兩天的資料,致使hot叢集負載依然很大。es有沒有辦法實現像mys

net.sz.framework 框架 輕鬆搭建資料服務中心----分離資料一致性,滑動快取

前言   前文講述了net.sz.framework 框架的基礎實現功能,本文主講 net.sz.framework.db 和 net.sz.framework.szthread; net.sz.framework.db 是 net.sz.framework 底層框架下的orm框架,仿照翻譯了hibernat

cassandra 資料一致性(consistency level)

cassandra 提供了高效能的資料寫入、讀取功能,整個叢集形成去中心化的環形結構,沒有單點故障,沒有主從節點之分,內部節點通過gossip協議進行通訊, 不需要依賴外部(hbase通過zookeeper) 使用者可以制定資料讀寫一致性(指定資料一次成功寫入或讀取的副本數

擴充套件Elasticsearch Azure Plugin支援/snapshot到多個Azure儲存賬號

       忙忙碌碌中2016就要過去,借這篇部落格小小總結一下。像往年一樣每年都是很忙很忙,今年尤其如此,哈哈哈!適逢年末,這一年可以總結的東西有很多,比如:開始讀了這本專業書《Modern Authentication with Azure Active Direct

elasticsearch 一致性原理以及quorum機制

一、簡介 我們在傳送任何一個增刪改操作的時候,比如說: put /index/type/id,都可以帶上一個consistency引數,指明我們想要的寫一致性是什麼,例: put /index/type/id?consistency=quorum 二、co

CopyOnWriteArrayList 分離,弱一致性

為什麼會有CopyOnWriteArrayList?   我們知道ArrayList和LinkedList實現的List都是非執行緒安全的,於是就有了Vector,它是基於ArrayList的執行緒安全集合,但Vector無論是add方法還是get方法都加上了synchronized修飾,當多執行

Android NFC近場通信02----卡的準備工作

是否 即將 oid win wrap img pac 適配器 style Android NFC近場通信02----讀寫卡的準備工作 因為公司接了一個聽上去感覺比較NB的項目。給某油田做派工系統 。並由