数据流编辑

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

您可以直接向数据流提交索引和搜索请求。流会自动将请求路由到存储流数据的后备索引。您可以使用 索引生命周期管理 (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 发送多个文档,期望最后写入者获胜,则您可能希望使用带有写入索引的索引别名。请参阅在没有数据流的情况下管理时间序列数据