MST

星途 面试题库

面试题:ElasticSearch路由机制中主分片的路由是如何确定的

在ElasticSearch路由机制里,主分片的路由决策过程是怎样的?涉及哪些关键因素和计算方式?
41.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

主分片路由决策过程

  1. 索引创建时:在创建索引时,Elasticsearch 会根据用户指定的主分片数量(默认为5个),为每个主分片分配一个唯一的标识。这些主分片会被均匀分配到集群中的各个节点上。
  2. 数据写入时:当有新的数据写入时,Elasticsearch 首先根据文档的 _id(如果未指定 _id,Elasticsearch 会自动生成一个),通过哈希算法计算出一个哈希值。这个哈希值会用来确定该文档应该被路由到哪个主分片上。

关键因素

  1. 主分片数量:主分片数量在索引创建时就已确定,并且后续无法轻易更改。它决定了数据在集群中的分布粒度。如果主分片数量过多,会增加管理开销;如果过少,可能导致数据分布不均,影响性能。
  2. 文档 _id:文档的 _id 是路由决策的重要依据。由于哈希算法的特性,相同 _id 的文档总是会被路由到同一个主分片上,这保证了数据的一致性。
  3. 集群拓扑结构:集群中的节点数量和状态也会影响主分片的路由。如果某个节点故障,Elasticsearch 会自动重新分配主分片到其他健康节点上,以保证数据的可用性。

计算方式

  1. 哈希计算:Elasticsearch 使用 MurmurHash3 算法对文档的 _id 进行哈希计算,得到一个哈希值。
  2. 取模运算:将哈希值对主分片数量进行取模运算,即 hash(_id) % number_of_primary_shards。得到的结果就是该文档应该被路由到的主分片的编号。例如,如果主分片数量为5,哈希值对5取模后得到0,那么该文档就会被路由到编号为0的主分片上。