document写一致性

本文介绍了Elasticsearch中写一致性的工作原理,包括协调节点如何处理客户端请求、数据同步过程及不同一致性级别(one、all、quorum)的含义与使用场景。详细解释了quorum机制下的等待超时策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)
2. coordinating node,对document进行路由,将请求转发给对应的node(有primary shard)
3. 实际的node上的primary shard处理请求,然后将数据同步到replica node
4. coordinating node,如果发现primary node和所有replica node都搞定,就将响应发送给客户端

写一致性原理
1. consistency,one(primary shard), all(all shard), quorum(default)
我们在发送任何一个增删改操作的时候,比如说put /index/type/id,都可以带上一个consistency参数,指明我们想要的写一致
性是什么?
put /index/type/id?consistency=quorum

one:要求我们这个写操作,只要有一个primary shard是active活跃可用的,就可以执行
all:要求我们这个写操作,必须所有的primary shard和replica shard都是活跃的,才可以执行写操作
quorum: 默认的值,要求所有的shard中,必须是大部分的shard都是活跃的,可用的,才可以执行这个写操作

2. quorum机制,写之前必须确保大多数shard都可用
quorum不齐全时,wait,默认1分钟,timeout,100,30s
等待期间,期望活跃的shard数量可以增加,最后是在不行,就会timeout
我们其实可以在写操作的时候,加一个timeout参数,比如说put /index/type/id?timeout=30 这个就是自己去设定quorum不齐全
的时候,es的timeout时长,可以缩短,也可以增长

### 实现Elasticsearch与MySQL间的数据同步和一致性 为了确保Elasticsearch (ES) 和 MySQL 间的高效数据同步以及维护两者的一致性,有几种不同的方法可供选择。每种方法都有其优缺点,在不同应用场景下的表现也有所差异。 #### 使用基于消息队列的同步方案 一种推荐的方式是采用基于消息队列的消息驱动架构来处理数据变更事件并触发相应的索引更新动作。此过程涉及设置一个中间件服务监听来自MySQL的变化记录(如通过binlog),并将这些变化转化为可以在应用程序层面理解的消息发送至消息队列中;之后由消费者读取消息并对Elasticsearch执行对应的CRUD操作[^1]。 ```java // Java伪代码展示如何消费RabbitMQ中的消息并更新Elasticsearch文档 public void consumeMessage(String message){ try { Map<String, Object> data = objectMapper.readValue(message, HashMap.class); String operationType = (String)data.get("operation"); switch(operationType.toLowerCase()){ case "insert": indexDocument(data); break; case "update": updateDocument(data); break; case "delete": deleteDocument((String)data.get("_id")); break; default: logger.warn("Unknown operation type: {}", operationType); } } catch(Exception e){ logger.error(e.getMessage(), e); } } ``` #### 双机制 另一种常见的做法就是所谓的双模式——每当发生任何对MySQL数据库的操作时,应用服务器会尝试立即向Elasticsearch发起相同的请求以保持两者的同步状态。虽然这种方法简单直接,但它可能会带来一些挑战,比如网络延迟可能导致部分成功的情况出现,因此需要额外考虑幂等问题及补偿措施[^2]。 #### 利用BinLog进行实时同步 对于追求更高级别的实时性和准确性而言,则可以通过解析MySQL产生的二进制日志文件(binlog),从中提取出所有的DML语句变动信息,并据此及时调整Elasticsearch内的相应条目。这种方式不仅减少了重复劳动还提高了系统的整体性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值