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),每個分片又可以有多個
Spark讀寫Elasticsearch
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的項目。給某油田做派工系統 。並由