数据流

edit

数据流允许您在多个索引中存储仅追加的时间序列数据,同时为您提供一个用于请求的单一命名资源。数据流非常适合日志、事件、指标和其他连续生成的数据。

您可以直接向数据流提交索引和搜索请求。数据流会自动将请求路由到存储数据流数据的备份索引。您可以使用索引生命周期管理 (ILM)来自动化管理这些备份索引。例如,您可以使用 ILM 自动将较旧的备份索引移动到成本较低的硬件,并删除不需要的索引。随着数据的增长,ILM 可以帮助您降低成本和开销。

你应该使用数据流吗?

edit

要确定是否应为您的数据使用数据流,您应考虑数据的格式以及预期的交互方式。适合使用数据流的良好候选数据应符合以下标准:

  • 您的数据包含一个时间戳字段,或者可以自动生成一个。
  • 您主要执行索引请求,偶尔进行更新和删除。
  • 您在没有_id的情况下索引文档,或者在明确使用_id索引文档时,您期望首次写入优先的行为。

对于大多数时间序列数据用例,数据流将是一个很好的选择。然而,如果你发现你的数据不适合这些类别(例如,如果你经常使用相同的_id发送多个文档,期望最后写入胜出),你可能希望使用带有写入索引的索引别名。有关更多信息,请参阅管理没有数据流的时间序列数据的文档。

请记住,某些功能如时间序列数据流 (TSDS)数据流生命周期需要一个数据流。

后备索引

edit

数据流由一个或多个隐藏的、自动生成的后备索引组成。

data streams diagram

数据流需要一个匹配的索引模板。该模板包含用于配置数据流支持索引的映射和设置。

每个索引到数据流的文档都必须包含一个@timestamp字段,映射为datedate_nanos字段类型。如果索引模板没有为@timestamp字段指定映射,Elasticsearch会将@timestamp映射为具有默认选项的date字段。

相同的索引模板可以用于多个数据流。您不能删除被数据流使用的索引模板。

后备索引的名称模式是一个实现细节,不应从中推导出任何智能。唯一不变的是,每个数据流生成索引都将有一个唯一的名称。

读取请求

edit

当您向数据流提交读取请求时,数据流会将请求路由到其所有后备索引。

data streams search request

写入索引

edit

最近创建的备份索引是数据流的写入索引。 流仅将新文档添加到此索引中。

data streams index request

您不能向其他后备索引添加新文档,即使通过直接向索引发送请求也不行。

您也不能对可能妨碍索引的写入索引执行操作,例如:

滚动更新

edit

一个 rollover 创建一个新的后备索引,该索引成为流的新的写入索引。

我们建议使用 ILM 来自动滚动数据流,当写入索引达到指定年龄或大小时。如果需要,您也可以 手动滚动 数据流。

生成

edit

每个数据流都会跟踪其生成:一个六位数、零填充的整数,从000001开始。

当创建一个后备索引时,索引的名称使用以下约定:

.ds-<data-stream>-<yyyy.MM.dd>-<generation>

是后备索引的创建日期。具有更高代数的后备索引包含更近期的数据。例如,web-server-logs 数据流的代数为 34。该流的最新后备索引创建于 2099 年 3 月 7 日,名称为 .ds-web-server-logs-2099.03.07-000034

一些操作,例如缩减恢复,可以更改后备索引的名称。 这些名称更改不会将其从其数据流中移除。

数据流的生成可以在不添加新索引到数据流的情况下发生变化(例如,当现有的后备索引被收缩时)。这意味着某些代的后备索引将永远不会存在。 您不应从后备索引名称中得出任何信息。

仅追加(大多数情况下)

edit

数据流适用于现有数据很少更新的使用场景。您不能直接向数据流发送现有文档的更新或删除请求。然而,您仍然可以通过直接向文档的支持索引提交请求来更新或删除文档

如果您需要更新数据流中的大量文档,可以使用按查询更新按查询删除API。

如果你经常使用相同的_id发送多个文档,期望最后写入胜出,你可能希望使用一个带有写入索引的索引别名。请参阅 在没有数据流的情况下管理时间序列数据