在 Elasticsearch 中,数据流(Data Streams)和索引(Indices)之间有着密切的关系,且数据流在管理索引生命周期和数据插入过程中扮演着重要角色。我们可以通过以下几个要点来理解它们之间的关系:
1. 数据流的定义
数据流是一种特殊的 Elasticsearch 数据结构,用于处理时序数据(例如日志、监控数据等)。它允许将多个相关的索引组织成一个逻辑上的“流”,而不需要在操作时显式地管理索引。数据流通常用于需要不断增长、定期滚动的场景。
- 数据流通过管理索引的生命周期来简化数据的存储和查询。
- 数据流的创建依赖于 索引模板,它定义了索引的名称模式、设置、映射和生命周期管理策略(ILM)。
2. 数据流与索引的关系
数据流和索引之间的关系可以通过以下几个方面来理解:
a. 数据流由索引组成
每个数据流都是由一个或多个索引组成的。这些索引具有相同的结构,并且它们共同存储某一类数据。数据流将索引组织成一个时间序列,并为应用程序提供统一的接口。
- 数据流通常对应着多个 索引,这些索引的名字遵循特定的命名规则(例如:
.ds-log-*
)。 - 每个数据流都有一个 写入索引(write index),这是数据流的主要入口,所有新的数据都会写入这个索引。写入索引是唯一可以被写入的索引,其他的索引只是存储历史数据。
b. 索引的生命周期管理(ILM)与数据流
数据流管理了与索引生命周期相关的操作(如rollover,shrink,delete),这些操作由 ILM 策略控制。
- rollover:当某个索引达到一定条件(如年龄、大小或文档数)时,数据流会自动滚动(rollover)到下一个索引。新创建的索引会继续作为新的写入索引。
- 数据流的每个索引都有一个 时间戳字段,通常用于时间序列数据,确保索引的数据按时间顺序流动。
c. 数据流的更新与索引的创建
- 数据流是一个动态的逻辑结构,可以随时创建新的索引或更改索引配置。
- 数据流中的每个索引通常是有生命周期的,并且通过 ILM 策略进行管理,数据流会根据 ILM 策略自动进行索引的切换(rollover),并最终删除过期的索引。
d. 数据流与多个索引的管理
数据流允许用户处理多个索引,而无需直接管理每个索引。例如,在日志场景下,每天或每小时都会创建一个新的索引,数据流自动管理这些索引的生成、轮换、查询等,而不需要人工干预。
3. 数据流的工作原理
数据流的工作原理是通过以下几个步骤完成的:
- 创建数据流:数据流是基于模板创建的,每个数据流有一个或多个关联的索引模板,并指定数据的生命周期管理策略(ILM)。
- 写入数据:数据流会有一个当前的“写入索引”,所有新的数据都会写入这个索引。这个索引会定期滚动,创建新的索引以保持数据流的高效存储和访问。
- 索引滚动(Rollover):当写入索引达到设定条件时(例如,索引大小、时间或文档数量),数据流会自动切换到下一个索引,并将新的索引设为“写入索引”。
- 删除过期数据:数据流通过 ILM 策略控制索引的删除。过期的索引会被删除,从而节省存储空间。
4. 数据流与传统索引的不同之处
传统的索引模式通常需要用户手动创建索引,并且在处理大规模的时序数据时需要复杂的索引管理。数据流简化了这一过程:
- 自动管理索引滚动:数据流自动进行索引的滚动操作,不需要用户手动干预。
- 按时间顺序查询数据:数据流在查询时会自动按时间顺序组织数据,减少了跨多个索引查询的复杂性。
- 统一接口:无论数据流包含多少个索引,应用程序只需要操作数据流,不需要关心具体的索引细节。
总结
- 数据流 是一个逻辑结构,用于组织和管理多个时间序列相关的索引。
- 索引 是数据存储的具体单位,数据流中的每个索引遵循一定的生命周期管理策略。
- 数据流通过 ILM 策略 自动管理索引的滚动和删除操作,使得用户可以集中精力处理数据而不需要直接管理索引的生命周期。
通过数据流,Elasticsearch 提供了一种更简化的方式来处理时间序列数据,自动管理索引的创建、滚动、查询和删除。