Elasticsearch
Elasticsearch源码级分析、原理与实现拆解
AlferWei
一个奋斗在编程路上的程序员。
展开
-
ES如何保证数据不丢
ES分片上的数据写入过程ES分片是对一个lucene实例的抽象,最终调用的都是lucene的缓冲和提交能力。1)将BulkItemRequests的每条数据在ES中被封装成index对象;2)ES调用lucene的addOrUpdateDocument()将数据缓冲到page cache;写入成功后,更新记录事务日志location;批量数据写入成功后,执行sync()将translog落盘;3)lucene执行fsync把数据落盘,并执行提交操作,将数据可见;过程如图所示可以看原创 2020-10-02 17:57:36 · 1351 阅读 · 0 评论 -
ES分布式写入的数据一致性问题
ES数据写入过程ES索引由多个分片组成,分片有主分片和副本分片,且主分片和副本不能同时在同一节点上。可以看到,ES数据写入是一个分布式的过程。假设客户端发送批量写请求,ES写入过程如下:1)协调节点接收到写请求,并做参数校验处理、生成id等;2)计算每条数据归属的主分片,形成Map<ShardId, List<RequestBulkItem>>列表;3)根据上面的列表,协调节点异步并行转发到所属分片;4)主分片接收到协调节点转发过来的请求,先由lucene写入pa原创 2020-10-02 15:47:47 · 3983 阅读 · 0 评论 -
设置健壮的RestClient客户端链接
问题描述:在使用elasticsearch提供的RestClient api的时候,经常会产生超时异常,(1)request retries exceeded max retry timeout [30000];(2)java.lang.RuntimeException: error while performing request;java.lang.RuntimeException: error while performing request at org.elasticsearch原创 2020-07-31 17:49:12 · 5399 阅读 · 0 评论