Elasticsearch 中的数据流生命周期
Elasticsearch 中的数据流生命周期是一种内置的自动化机制,用于管理数据保留、性能和存储优化。通过为您的 数据流 配置滚动更新、保留和下采样规则,您可以确保时序数据得到高效维护,并在不再需要时删除旧数据。本页面介绍了生命周期的工作原理、主要功能以及如何为新的和现有的数据流配置它。
数据流生命周期根据您的保留要求管理您的数据流。例如,您可以配置生命周期以
- 确保数据流中索引的数据至少保留在您定义的保留时间内。
- 确保 Elasticsearch 在稍后的时间自动删除超过保留期的数据。
为实现这些目标,数据流生命周期支持
- 自动 滚动更新 (rollover),将传入的数据分成较小的块,以促进更好的性能和处理向后不兼容的映射更改。
- 可配置的保留策略,允许您配置数据保证存储的时间段。Elasticsearch 可以在稍后的时间删除早于此时间段的数据。保留策略可以在数据流级别或全局级别进行配置。请在此 教程 中阅读有关不同选项的更多信息。
数据流生命周期还支持对数据流支持索引进行下采样。有关更多详细信息,请参阅 下采样示例。
请注意数据流生命周期的可用性,以确保它适用于您的用例
数据流生命周期仅支持数据流,不能用于单个索引。
数据流生命周期支持版本化 Elastic Stack 上的所有部署类型以及 Elasticsearch Serverless。
Elasticsearch 会按照 data_streams.lifecycle.poll_interval 配置的间隔,遍历每个数据流并执行以下步骤
- 检查数据流是否配置了数据流生命周期,跳过任何不属于托管数据流的索引。
- 如果数据流的写索引满足
cluster.lifecycle.default.rollover定义的条件,则对其进行滚动更新。 - 当索引不再是写索引(即数据流已滚动更新)后,自动对索引执行尾部合并。数据流生命周期执行的合并操作仅针对小段的长尾部分,而不是整个分片。由于段是按指数大小分层组织的,合并小段的长尾部分所需的成本仅为强制合并为单个段的一小部分。小段通常保存最近的数据,因此尾部合并会将合并资源集中在最有可能被持续查询的高价值数据上。
- 如果配置了 下采样,它将执行所有配置的下采样轮次。
- 对剩余的支持索引应用保留策略。这意味着删除
generation_time(生成时间)长于有效保留期的支持索引(请阅读有关 有效保留计算 的更多信息)。generation_time仅适用于已滚动更新的支持索引,它是自支持索引滚动更新以来的时间,或者是index.lifecycle.origination_date设置中可选配置的时间。
重要提示
我们使用 generation_time 而不是创建时间,因为这确保了支持索引中的所有数据都已经过了保留期。因此,保留期并不是删除数据的确切时间,而是数据将被存储的最短时间。
注意
步骤 2-4 仅适用于尚未由 ILM 管理的支持索引,这意味着这些索引要么没有定义 ILM 策略,要么即使有,其 index.lifecycle.prefer_ilm 也被设置为 false。
由于生命周期是在数据流级别配置的,因此为新数据流和现有数据流配置生命周期的过程有所不同。
有四个教程可以帮助您设置和管理具有数据流生命周期的数据流
- 要创建带有生命周期的新数据流,请将数据流生命周期添加为匹配您数据流名称的索引模板的一部分。有关详细步骤,请参阅 创建带有生命周期的数据流。当带有您数据流名称的写操作到达 Elasticsearch 时,该数据流将使用相应的数据流生命周期创建。
- 要更新单个现有数据流的生命周期设置,请使用 数据流生命周期 API。有关详细信息,请参阅 更新数据流的生命周期。
- 数据流的保留设置既可以单独在数据流级别配置,也可以在集群中为所有数据流全局配置。要了解更多信息,请参阅 为 Elasticsearch 数据流设置保留期。
- 要将现有的 ILM 管理的数据流迁移到数据流生命周期,请按照 将 ILM 管理的数据流迁移到数据流生命周期 中的步骤操作。
注意
更新现有数据流的数据流生命周期与更新设置或映射不同,因为它是在数据流级别应用的,而不是在单个支持索引上应用的。