Elasticsearch数据流(Data Streams)全面解析

Elasticsearch数据流(Data Streams)全面解析

elasticsearch elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch

什么是数据流?

数据流(Data Stream)是Elasticsearch中一种专门用于处理时序数据的抽象概念,它允许用户将只追加(append-only)的时序数据存储在多个索引中,同时对外提供单一命名资源进行访问。数据流特别适合存储日志、事件、指标等持续生成的数据。

与传统索引管理方式相比,数据流具有以下核心优势:

  1. 自动路由:索引和搜索请求可以直接发送到数据流,系统会自动将请求路由到存储数据的底层索引
  2. 生命周期管理:可以与索引生命周期管理(ILM)无缝集成,自动管理底层索引
  3. 简化操作:提供统一的入口点,无需手动管理各个底层索引

何时应该使用数据流?

判断是否应该使用数据流,需要考虑数据格式和预期交互方式。适合使用数据流的场景通常符合以下特征:

  • 时间序列特性:数据包含时间戳字段(或可自动生成)
  • 写入模式:主要是索引操作,偶尔有更新和删除
  • ID处理:索引文档时不指定_id,或者指定_id时采用"首次写入获胜"策略

对于大多数时序数据用例,数据流都是理想选择。但如果需要频繁使用相同_id更新文档(采用"最后写入获胜"策略),则可能需要考虑使用带有写入索引的索引别名。

数据流核心架构

底层索引(Backing Indices)

数据流由一个或多个自动生成的隐藏索引组成,这些索引被称为"底层索引"。每个数据流都需要一个匹配的索引模板,该模板包含用于配置底层索引的映射和设置。

关键特性:

  • 每个索引到数据流的文档必须包含@timestamp字段
  • 同一模板可用于多个数据流
  • 底层索引名称遵循特定命名约定,但不应从中推导业务逻辑

读写机制

读取请求:当向数据流发送读取请求时,请求会被路由到所有底层索引。

写入索引:最新创建的底层索引作为数据流的写入索引,所有新文档都只添加到该索引中。不能向其他底层索引添加新文档,也不能对写入索引执行可能阻碍索引的操作(如克隆、删除、收缩或拆分)。

数据流生命周期管理

滚动更新(Rollover)

滚动更新会创建一个新的底层索引,该索引将成为数据流的新写入索引。推荐使用ILM(索引生命周期管理)在写入索引达到指定大小或年龄时自动滚动数据流。

代次(Generation)

每个数据流都会跟踪其代次信息(从000001开始的6位零填充整数)。底层索引的命名遵循以下约定:

.ds-<数据流名称>-<yyyy.MM.dd>-<代次>

其中<yyyy.MM.dd>是底层索引的创建日期。代次较高的索引包含较新的数据。需要注意的是,某些操作(如收缩或恢复)可能会更改底层索引名称,但不会将其从数据流中移除。

数据流使用限制

数据流主要针对很少更新现有数据的用例设计:

  1. 更新限制:不能直接向数据流发送更新或删除现有文档的请求
  2. 替代方案:可以通过直接向文档所在的底层索引发送请求来更新或删除文档
  3. 批量操作:可以使用"按查询更新"和"按查询删除"API来修改大量文档

如果应用场景需要频繁更新具有相同_id的文档,建议考虑使用带有写入索引的索引别名方案。

最佳实践建议

  1. 时间戳字段:确保所有文档都包含有效的@timestamp字段
  2. 索引模板:预先设计好匹配的索引模板,包含必要的映射和设置
  3. 生命周期策略:结合ILM策略自动管理底层索引的生命周期
  4. 写入模式:避免频繁更新操作,遵循"首次写入获胜"原则
  5. 监控代次:了解数据流代次变化,但不依赖底层索引名称进行业务逻辑判断

通过合理使用数据流功能,可以显著简化时序数据的管理工作,提高系统可靠性和运维效率。

elasticsearch elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裴才隽Tanya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值