面试题答案
一键面试refresh_interval
- 默认情况:默认值是1秒,这意味着Elasticsearch每秒会将内存中的数据刷新到磁盘生成新的段,从而使数据可搜索。
- 高并发场景调整:在高并发海量写入场景下,可适当增大该值,如设置为30秒或1分钟。这样减少了频繁刷新操作对系统资源的消耗,因为每次刷新都会涉及I/O操作。但增大该值会导致数据可见延迟增加,所以要根据业务对数据实时性的容忍程度来调整。
index.translog.durability
- 默认情况:默认值为
request
,即每次写入请求都将事务日志(translog)刷新到磁盘,确保数据不会丢失,但这在高并发写入时会带来较大的I/O开销。 - 高并发场景调整:可考虑设置为
async
,并结合一个合理的async_interval
(如5秒)。这种方式下,Elasticsearch会每隔async_interval
时间将事务日志刷新到磁盘。这样可以减少I/O操作频率,提高写入性能。不过,一旦发生故障,可能会丢失async_interval
时间段内的数据,所以要权衡数据一致性和写入性能的需求。
index.merge.policy
- 默认策略:Elasticsearch默认使用
TieredMergePolicy
。 - 高并发场景调整:
- 调整参数:
- max_merge_at_once:默认值是10,可适当增大该值,例如设置为20或30,允许一次合并更多的段,减少合并次数,但会占用更多的I/O和内存资源。
- max_merge_at_once_explicit:默认值是30,在手动触发合并时,可根据实际情况适当调整,以优化合并过程。
- index.merge.policy.floor_segment:默认值是2MB,可适当增大,比如设置为10MB,减少小文件段的合并频率,提高性能。
- 调整参数:
其他索引设置优化
- 副本数量:
- 默认情况:默认每个索引有1个副本。
- 高并发场景调整:在高并发读场景下,可适当增加副本数量,提高查询的并行处理能力。但副本数量过多会占用更多的磁盘空间和网络带宽用于数据同步,所以要根据硬件资源和业务需求权衡。
- 分片数量:
- 计算方式:要根据数据量、节点数量和硬件资源合理规划。一般原则是每个分片大小控制在10GB - 50GB左右。例如,如果预计数据量为1TB,可考虑设置20 - 100个分片。
- 动态调整:在集群运行过程中,可根据实际的写入和查询负载动态调整分片数量。如果写入负载过高,可适当增加分片;如果查询性能不佳,可考虑减少分片以优化查询效率。