1.概述
1.1 ES写入性能优化
1. 写入数据不指定doc_id,让 ES 自动生成
索引中每一个 doc 都有一个全局唯一的 doc_id,这个 doc_id 可自定义,也可以让ES自动生成。
如果自定义的话,则ES在写入过程中会多一步判断的过程,即先Get下该 doc_id 是否已经存在。如果存在的话则执行 Update 操作,不存在则创建新的 doc。
因此如果我们对索引 doc_id 没有特别要求,则建议让ES自动生成 doc_id,这样可提升一定的写入性能。
2. 对于规模较大的集群,建议提前创建好索引,且使用固定的 Index mapping
这一条优化建议在上面也提到了,因为创建索引及新加字段都是更新元数据操作,需要 master 节点将新版本的元数据同步到所有节点。
因此在集群规模比较大,写入qps较高的场景下,特别容易出现master更新元数据超时的问题,这可导致 master 节点中有大量的 pending_tasks 任务堆积,从而造成集群不可用,甚至出现集群无主的情况。