带你读《Elastic Stack 实战手册》之47:——3.5.6.Datastream (2)

简介: 带你读《Elastic Stack 实战手册》之47:——3.5.6.Datastream (2)

《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.6.Datastream (1) https://developer.aliyun.com/article/1228586


Data stream 的组成

 

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

 

image.png


在实际的 Elasticsearch 操作中,数据流依靠索引模板来设定数据流实体的后备索引。

 

l 模板包含用于配置流的后备索引的映射和设置。

l 同一个索引模板可用于多个数据流。

l 不能删除数据流正在使用的索引模板。

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

 

data stream 的读请求主要如下图,数据流自动将请求路由到其所有后备索引。

image.png


而对于写请求,数据流则将该请求自动转发给最新的后备索引。

image.png


对于写请求,有两点需要注意:


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

image.png

image.png

注意:

 

l rollover 设置中,文档数和最大存在时间是相对敏感的配置参数,由于 Elasticsearch 并不是实时监控 ILM 的执行任务(默认十分钟),最终结果并不一定完全一致。

l ILM 任务判断中,max_size 判断的是主分片的大小,而不是整个索引的大小。

l 新版本下,max_size 的判断并不敏感,可能是因为索引的主分片 size 大小会被 merge 后收缩,需要有一定时间的观察。如下图。200MB之下的 max_size 会失效。建议max_size设置参数不要太小。


image.png

《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.6.Datastream (3) https://developer.aliyun.com/article/1228581

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 缓存 Java
仅花200行代码,如何将60万行的RocksDB改造成协程
采用少量手动修改+自动代码转换的方式,将大型多线程程序改造成协程。在某些重IO、高并发的场景中,帮助业务取得了性能翻倍的效果。
56709 3
仅花200行代码,如何将60万行的RocksDB改造成协程
|
SQL Linux Go
docker镜像分析利器之dive
docker镜像分析利器之dive
1125 0
|
7月前
|
SQL 监控 关系型数据库
MySQL分区表:大规模数据管理的解决方案
本文深入解析了MySQL分区表的原理与实战应用,涵盖分区类型、管理策略及性能优化技巧,帮助用户提升查询效率和数据管理能力。
|
9月前
|
Java Linux API
IO模型
BIO、NIO、AIO是Java中处理网络I/O的三种模型。BIO为阻塞式,每个连接需单独线程,高并发下性能受限;NIO通过非阻塞与多路复用提升并发能力,少量线程可处理大量请求;AIO进一步实现异步非阻塞,数据复制时线程可释放,由回调机制处理后续操作。三者适用于不同场景,BIO易用但低效,NIO高效但复杂,AIO理论性能更优但目前在Linux上仍依赖多路复用实现。Java 21引入虚拟线程后,BIO也可兼具高性能与易编写特性。
253 2
|
9月前
|
监控 Java 关系型数据库
排他锁
排他锁(写锁)是一种互斥机制,确保同一时间仅一个线程访问共享资源,保障数据一致性与完整性。适用于写操作场景,如更新、删除等,常见于数据库和多线程编程。其优点为强一致性和实现简单,但并发度低且存在死锁风险。可通过synchronized、ReentrantLock等方式实现。
240 0
|
9月前
|
缓存 Java 关系型数据库
共享锁
共享锁允许多个线程同时读取共享资源,写操作时阻塞其他线程,通过“读共享、写独占”策略提升并发性能,适用于读多写少场景,如缓存、数据库查询等。
285 0
|
9月前
|
存储 Java 容器
偏向锁
偏向锁是JVM为提升单线程环境下锁性能而引入的优化机制。其核心思想是将锁偏向首个获取它的线程,避免无竞争时的同步开销,从而提高执行效率。适用于锁由同一线程多次获取、无并发竞争的场景。一旦出现多线程竞争,偏向锁会撤销并升级为更高级别的锁。合理使用可显著提升性能,但在高并发环境下需谨慎配置。
195 0
|
6月前
|
Ubuntu 关系型数据库 MySQL
MySQL源码编译安装
本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。
1628 4
MySQL源码编译安装
|
12月前
|
存储 Kubernetes 对象存储
StrmVol 存储卷:解锁 K8s 对象存储海量小文件访问性能新高度
本文介绍了阿里云容器服务(ACK)支持的StrmVol存储卷方案,旨在解决Kubernetes环境中海量小文件访问性能瓶颈问题。通过虚拟块设备与内核态文件系统(如EROFS)结合,StrmVol显著降低了小文件访问延迟,适用于AI训练集加载、时序日志分析等场景。其核心优化包括内存预取加速、减少I/O等待、内核态直接读取避免用户态切换开销,以及轻量索引快速初始化。示例中展示了基于Argo Workflows的工作流任务,模拟分布式图像数据集加载,测试结果显示平均处理时间为21秒。StrmVol适合只读场景且OSS端数据无需频繁更新的情况,详细使用方法可参考官方文档。
1601 145
|
网络协议 C++ 数据格式
websocket协议介绍与基于reactor模型的websocket服务器实现
websocket协议介绍与基于reactor模型的websocket服务器实现
413 0

热门文章

最新文章