滚动更新
编辑滚动更新
编辑当索引诸如日志或指标之类的时间序列数据时,您不能无限期地写入单个索引。为了满足您的索引和搜索性能要求并管理资源使用,您需要写入一个索引,直到达到某个阈值,然后创建一个新索引并开始写入它。使用滚动索引使您能够:
- 在高性能的热节点上优化活动索引以实现高摄取率。
- 在温节点上优化搜索性能。
- 将较旧、访问频率较低的数据转移到成本较低的冷节点。
- 通过删除整个索引,根据您的保留策略删除数据。
我们建议使用数据流来管理时间序列数据。数据流会自动跟踪写入索引,同时将配置保持在最低限度。
每个数据流都需要一个索引模板,其中包含:
- 数据流的名称或通配符(
*
)模式。 - 数据流的时间戳字段。此字段必须映射为
date
或date_nanos
字段数据类型,并且必须包含在索引到数据流的每个文档中。 - 创建时应用于每个后备索引的映射和设置。
数据流专为仅追加数据而设计,其中数据流名称可用作操作(读取、写入、滚动更新、收缩等)的目标。如果您的用例需要就地更新数据,您可以改用索引别名来管理您的时间序列数据。但是,还有一些配置步骤和概念:
- 一个索引模板,用于指定系列中每个新索引的设置。您可以优化此配置以进行摄取,通常使用与您拥有的热节点一样多的分片。
- 一个索引别名,它引用整个索引集。
- 一个指定为写入索引的单个索引。这是处理所有写入请求的活动索引。在每次滚动更新时,新索引将成为写入索引。
当索引滚动更新时,前一个索引的年龄会更新以反映滚动更新时间。此日期(而不是索引的creation_date
)用于索引生命周期管理min_age
阶段计算。了解更多。
自动滚动更新
编辑ILM 和数据流生命周期(在 [预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受正式 GA 功能的支持 SLA 的约束。 ])使您能够根据索引大小、文档计数或年龄等条件自动滚动更新到新索引。当触发滚动更新时,会创建一个新索引,写入别名会更新以指向新索引,并且所有后续更新都会写入新索引。
基于大小、文档计数或年龄滚动更新到新索引比基于时间的滚动更新更可取。在任意时间滚动更新通常会导致许多小索引,这会对性能和资源使用产生负面影响。
即使空索引具有相关的max_age
(否则会导致滚动更新发生),也不会滚动更新。策略可以通过添加"min_docs": 0
条件来覆盖此行为,并显式选择滚动更新空索引。也可以通过将indices.lifecycle.rollover.only_if_has_documents
设置为false
在集群范围内禁用此功能。
如果一个或多个分片包含 200000000 个或更多文档,则滚动更新操作会隐式地滚动更新数据流或别名。通常,分片会在达到 2 亿个文档之前达到 50GB,但对于节省空间的数据集来说并非如此。如果一个分片包含超过 2 亿个文档,则搜索性能很可能会受到影响。这就是内置限制的原因。