导读
本文经过大量案例总结和踩坑复盘,归纳整理了Elastisearch集群在写入性能优化方面一些常用的优化技巧和避坑指南。
在我们服务腾讯云ES的客户过程中,经常会收到一些客户对云上ES集群读写性能未能达到预期的反馈,并希望我们能够配合做一些性能压测及调优的工作。经过我们结合客户的业务场景和深入分析集群性能瓶颈后,基本都可以给出客户一些能够明显提升读写性能的建议和优化措施。
腾讯云大数据ES团队通过众多大客户集群的实践经验,归纳整理了Elastisearch集群在写入性能优化方面一些常用的优化技巧和避坑指南。
ES集群索引原理剖析
在介绍ES集群写入性能优化之前,我们先来简单回顾下Elastisearch集群索引的基本流程。如下图1所示。
图1. ES集群索引写入流程示意图
通过分析图1的左半部分,可以看出ES写入基本流程如下:
1、客户端向Node1发送索引文档请求;
2、Node1节点根据doc_id确定文档属于分片0,将请求转发到Node3
3、Node3在主分片上执行请求,成功后将请求并行转发到副本分片所在节点。一旦所有副本分片都写入成功,则Node3向协调节点返回写入成功,协调节点向客户端报告doc文档写入成功。
而通过分析图1的右半部分,我们可以看出写入到ES集群的文档在一个分片上的具体执行逻辑,主要分为如下图2所示的四个关键步骤。
图2. ES集群写入核心流程示意图
1、Wirte过程:
分片所在的节点在接收到协调节点的写入请求后,首先会将doc写入到一个叫In-memo