JJava 知识库
JAVA INTERVIEW

高频面试题

ES进阶约 2 分钟

新建一个预计十亿文档的 ES 索引,主分片和副本数怎么定?分片过多有什么问题?

参考回答约 2 分钟 · 口语表达
我的判断

十亿文档的主分片数要从未来数据量、目标 shard 大小、节点数和恢复时间估算,副本数再按可用性和查询吞吐决定。

我会先估算压缩后总大小而不是只看文档数。假设主数据约 2TB,希望单 shard 3050GB,初始需要约 4070 个主分片,再结合数据节点数让主分片均匀分布,并压测索引与查询。日志类数据更适合 data stream + rollover,让每个 backing index 的 shard 保持目标大小。

副本通常至少 1,保证单节点故障后仍可查询,也能增加搜索并行资源,但写入和存储成本会成倍增加。节点和副本必须跨故障域分配。

分片过多会让 cluster state、heap、文件句柄、segment、查询 fan-out 和恢复开销上升;大量 1GB 小 shard 往往比少量合理 shard 更差。分片过大则迁移和恢复时间长。

我会通过 rollover、ILM 和定期 shrink/迁移管理生命周期,而不是为十年后容量一次创建几百个空主分片。