《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.6.Datastream (1) https://developer.aliyun.com/article/1228586
Data stream 的组成
数据流在 Elasticsearch 集群中由一个或多个隐藏的、自动生成的后备索引组成。
在实际的 Elasticsearch 操作中,数据流依靠索引模板来设定数据流实体的后备索引。
l 模板包含用于配置流的后备索引的映射和设置。
l 同一个索引模板可用于多个数据流。
l 不能删除数据流正在使用的索引模板。
每个索引到数据流的文档,必须包含一个 @timestamp 字段,映射为 date 或 date_nanos 字段类型。如果索引模板没有为 @timestamp 字段指定映射,Elasticsearch 将 @timestamp映射为带有默认选项的日期字段。
data stream 的读请求主要如下图,数据流自动将请求路由到其所有后备索引。
而对于写请求,数据流则将该请求自动转发给最新的后备索引。
对于写请求,有两点需要注意:
l 不能将新文档添加到其他非最新后备索引,即使直接将请求发送到这些索引也不行。
l 不能对正在写入的索引做 Clone/Close/Delete/Freeze/Shrink/Split 相关操作。
注:7.12版本可以 Close
data stream 的特性
生成
每个 data stream 的后备索引都有一个 generation 数,一个六位数,零填充的整数,从 000001 开始,用作该流的 rollover 的计数。
后备索引名主要依照以下格式:
.ds--
Generation 越大,后备索引包含的数据越新。 例如,web-server-logs 数据流最新的 generation 为 34。该流的最新后备索引名为 .ds-web-server-logs-000034。
注意:某些操作(例如 shrink 或 restore )可以更改后备索引的名称。 这些名称更改不会从其数据流中删除后备索引。
Rollover
在 data stream 的使用中,rollover 是必不可少的条件。
创建数据流时,Elasticsearch 会自动为该 data stream 根据 template 创建一个后备索引。该索引还充当流的第一个写入索引。当满足一定条件时, rollover 会创建一个新的后备索引,该后备索引将成为 data stream 的新写入索引。
当然 rollover 的条件设置主要依靠 ILM。 如果需要,你还可以手动将数据 rollover 。
追加
由于时序性数据的特征,data stream 的设计场景中,数据是只追加的,极少需要修改删除。如果实际需要修改删除,则可以考虑以下操作:
对于数据流只能通过 update by query 或者 delete by query 操作,不能进行 update 或l 者 delete 文档。
l 需要 delete 或者 update 文档,则直接对后备索引操作。
l 需要经常删除或者修改文档的,请使用索引别名或者索引模板,不要对 data stream 操作。
data stream 的使用
创建索引生命周期管理策略 ILM
索引生命周期管理策略 ILM 的主要配置细节见索引周期管理一章,此处主要做 hot 和 delete阶段的设置,用于 rollover 的引用。
相关命令:
PUT /_ilm/policy/my-data-stream-policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "25GB" } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } }
Kibana 图形界面: Stack Management -> Index Lifecycle Policies -> Create policy
注意:
l rollover 设置中,文档数和最大存在时间是相对敏感的配置参数,由于 Elasticsearch 并不是实时监控 ILM 的执行任务(默认十分钟),最终结果并不一定完全一致。
l ILM 任务判断中,max_size 判断的是主分片的大小,而不是整个索引的大小。
l 新版本下,max_size 的判断并不敏感,可能是因为索引的主分片 size 大小会被 merge 后收缩,需要有一定时间的观察。如下图。200MB之下的 max_size 会失效。建议max_size设置参数不要太小。
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.6.Datastream (3) https://developer.aliyun.com/article/1228581