数据流

编辑

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

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

您应该使用数据流吗?

编辑

要确定是否应该为您的数据使用数据流,您应该考虑数据的格式以及您预期的交互方式。使用数据流的理想候选者将符合以下条件:

  • 您的数据包含时间戳字段,或者可以自动生成时间戳字段。
  • 您主要执行索引请求,偶尔进行更新和删除操作。
  • 您索引文档时不使用_id,或者在使用显式_id索引文档时,您期望首写优先的行为。

对于大多数时间序列数据用例,数据流都是一个不错的选择。但是,如果您发现您的数据不符合这些类别(例如,如果您经常使用相同的_id发送多个文档,并期望后写优先),则可能需要改用带有写入索引的索引别名。有关更多信息,请参阅无需数据流管理时间序列数据的文档。

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

后端索引

编辑

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

data streams diagram

数据流需要匹配的索引模板。该模板包含用于配置流后端索引的映射和设置。

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

同一个索引模板可用于多个数据流。您不能删除数据流正在使用的索引模板。

后端索引的命名模式是实现细节,不应从中推断任何信息。唯一不变的是每个数据流生成索引都将具有唯一的名称。

读取请求

编辑

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

data streams search request

写入索引

编辑

最近创建的后端索引是数据流的写入索引。数据流仅向此索引添加新文档。

data streams index request

您无法向其他后端索引添加新文档,即使是直接向索引发送请求也不行。

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

切换

编辑

切换会创建一个新的后端索引,该索引将成为流的新写入索引。

我们建议使用ILM在写入索引达到指定年龄或大小后自动切换数据流。如果需要,您还可以手动切换数据流。

生成

编辑

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

创建后端索引时,索引使用以下约定命名:

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

<yyyy.MM.dd>是后端索引的创建日期。生成较高的后端索引包含较新的数据。例如,web-server-logs数据流的生成号为34。流的最近创建的后端索引(于 2099 年 3 月 7 日创建)名为.ds-web-server-logs-2099.03.07-000034

某些操作(例如压缩恢复)可能会更改后端索引的名称。这些名称更改不会将其后端索引从其数据流中移除。

数据流的生成可能会在没有向数据流添加新索引的情况下发生变化(例如,当压缩现有后端索引时)。这意味着某些生成的备份索引将永远不存在。您不应从后端索引名称中推断任何信息。

仅追加(大部分)

编辑

数据流设计用于很少更新现有数据的用例。您不能直接向数据流发送现有文档的更新或删除请求。但是,您仍然可以通过直接向文档的后端索引提交请求来更新或删除数据流中的文档。

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

如果您经常使用相同的_id发送多个文档,并期望后写优先,则可能需要改用带有写入索引的索引别名。请参阅无需数据流管理时间序列数据