【Elasticsearch】使用ILM自动化滚动操作

如何在Elasticsearch中使用索引生命周期管理(ILM)自动化滚动操作(rollover)的教程。

---

Elasticsearch教程:使用ILM自动化滚动操作

在Elasticsearch中,索引生命周期管理(ILM)是一种强大的工具,用于自动化管理时间序列数据的索引滚动操作。通过ILM,你可以根据预定义的策略自动滚动索引,优化存储成本,提高查询性能,并实施数据保留策略。本教程将详细介绍如何使用ILM自动化滚动操作,包括使用数据流(data streams)和索引别名(index aliases)两种方式。

1.使用数据流(Data Streams)管理时间序列数据

数据流是Elasticsearch中用于处理时间序列数据的一种高级抽象,适用于追加写入的场景。数据流可以自动滚动到新的后端索引,并通过生命周期策略管理这些索引。

1.1 创建生命周期策略

生命周期策略定义了索引在不同阶段的行为和操作。一个完整的生命周期可以包含以下阶段:

• 热(Hot):索引处于活跃状态,用于写入和查询。

• 温(Warm):索引不再写入,但仍然可以查询。

• 冷(Cold):索引被移动到低成本存储,查询性能较低。

• 冻结(Frozen):索引被冻结,查询性能最低。

• 删除(Delete):索引被删除。

例如,以下策略定义了`hot`和`delete`两个阶段:

```json

PUT _ilm/policy/timeseries_policy

{

  "policy": {

    "phases": {

      "hot": {

        "actions": {

          "rollover": {

            "max_primary_shard_size": "50GB", // 当主分片大小达到50GB时滚动

            "max_age": "30d" // 或索引年龄达到30天时滚动

          }

        }

      },

      "delete": {

        "min_age": "90d", // 在滚动后90天删除索引

        "actions": {

          "delete": {}

        }

      }

    }

  }

}

```

1.2 创建索引模板

索引模板用于定义数据流的初始设置和生命周期策略。创建索引模板时,需要指定`index.lifecycle.name`,以便将生命周期策略应用于数据流。

```json

PUT _index_template/timeseries_template

{

  "index_patterns": ["timeseries"],

  "data_stream": {},

  "template": {

    "settings": {

      "number_of_shards": 1,

      "number_of_replicas": 1,

      "index.lifecycle.name": "timeseries_policy"

    }

  }

}

```

1.3 创建数据流

创建数据流的最简单方式是通过索引文档。Elasticsearch会自动根据索引模板创建数据流及其第一个后端索引。

```json

POST timeseries/_doc

{

  "message": "logged the request",

  "@timestamp": "1591890611"

}

```

当滚动条件满足时,ILM会自动创建新的后端索引,并将写入操作切换到新索引。

1.4 检查生命周期进度

使用ILM的`explain`API可以查看索引的生命周期状态,包括当前阶段、操作和进度。

```json

GET .ds-timeseries-*/_ilm/explain

```

2.不使用数据流管理时间序列数据

数据流虽然强大,但它是追加写入的,不支持直接更新或删除数据。如果你需要频繁更新或删除数据,可以使用索引别名来管理时间序列数据。

2.1 创建生命周期策略

生命周期策略的创建方式与数据流相同。例如:

```json

PUT _ilm/policy/timeseries_policy

{

  "policy": {

    "phases": {

      "hot": {

        "actions": {

          "rollover": {

            "max_primary_shard_size": "50GB",

            "max_age": "30d"

          }

        }

      },

      "delete": {

        "min_age": "90d",

        "actions": {

          "delete": {}

        }

      }

    }

  }

}

```

2.2 创建索引模板

索引模板需要指定`index.lifecycle.rollover_alias`,以便在滚动时更新别名。

```json

PUT _index_template/timeseries_template

{

  "index_patterns": ["timeseries-*"],

  "template": {

    "settings": {

      "number_of_shards": 1,

      "number_of_replicas": 1,

      "index.lifecycle.name": "timeseries_policy",

      "index.lifecycle.rollover_alias": "timeseries"

    }

  }

}

```

2.3 启动初始索引

创建初始索引,并将其指定为别名的写入索引。

```json

PUT timeseries-000001

{

  "aliases": {

    "timeseries": {

      "is_write_index": true

    }

  }

}

```

2.4 检查生命周期进度

与数据流类似,使用`explain`API查看索引的生命周期状态。

```json

GET timeseries-*/_ilm/explain

```

---

总结

通过ILM,Elasticsearch提供了强大的工具来自动化时间序列数据的索引滚动操作。无论是通过数据流还是索引别名,你都可以根据需求选择合适的方式:

• 数据流:适用于追加写入的场景,提供自动滚动和生命周期管理。

• 索引别名:适用于需要更新或删除数据的场景,提供了更大的灵活性。

在Elasticsearch中,索引别名(Index Aliases)适用于需要更新或删除数据的场景,主要原因如下:


1. 数据流的追加写入限制

数据流(Data Streams)是为追加写入设计的,主要用于处理时间序列数据,如日志、事件或度量数据。它们不支持直接更新或删除已存在的数据。如果需要频繁更新或删除数据,使用数据流可能会导致复杂性增加,因为这些操作需要通过额外的API(如`update_by_query`或`delete_by_query`)来实现。


2. 索引别名的灵活性

索引别名提供了一种更灵活的方式来管理索引。你可以将别名指向一个或多个索引,并在需要时动态更新别名的指向。例如,你可以创建一个写入索引(write index),并将别名指向该索引。当需要滚动到新索引时,只需更新别名的指向即可。这种方式特别适合需要频繁更新或删除数据的场景,因为它允许直接对底层索引进行操作,而不会受到数据流的追加写入限制。


3. 零停机时间的索引切换

索引别名支持原子性操作,这意味着在切换索引时不会出现停机时间。例如,当需要滚动到新索引时,可以先创建一个新索引,然后将别名从旧索引切换到新索引。这种无缝切换确保了应用的连续可用性。


4. 支持更新和删除操作

索引别名允许直接对底层索引进行更新或删除操作。这使得在处理需要频繁修改数据的场景时更加高效。例如,如果你需要根据某些条件删除旧数据或更新现有数据,可以直接在别名指向的索引上执行这些操作。


总结
索引别名适用于需要更新或删除数据的场景,因为它提供了更高的灵活性和直接操作底层索引的能力。相比之下,数据流更适合追加写入的场景,因为它们不支持直接更新或删除数据。如果你的应用场景需要频繁更新或删除数据,建议使用索引别名而不是数据流。

通过创建生命周期策略和索引模板,你可以轻松地管理索引的生命周期,优化存储成本和查询性能,同时满足数据保留策略的要求。

如果你有任何疑问或需要进一步的帮助,请随时联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27324.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPT-4.5来了

https://chat.xutongbao.top/

从 JVM 源码(HotSpot)看 synchronized 原理

大家好,我是此林。 不知道大家有没有这样一种感觉,网上对于一些 Java 框架和类的原理实现众说纷纭,看了总是不明白、不透彻。常常会想:真的是这样吗? 今天我们就从 HotSpot 源码级别去看 synchronized 的实现原理。全…

下载b站视频音频

文章目录 方案一:jjdown如何使用 方案二:bilibili哔哩哔哩下载助手如何使用进入插件网站插件下载插件安装 使用插件下载视频音频:复制音频下载地址 方案三:bat命令下载单个音频下载单个视频下载单个音视频 方案一:jjdo…

快速在本地运行SpringBoot项目的流程介绍

目录 前言 一、环境配置 1.1Java环境 1.2Maven环境 1.3IntelliJ IDEA安装 1.4MySql安装 二、项目导入与启动的过程 2.1Maven镜像和本地仓库 2.1.2镜像配置 2.1.3配置本地仓库 2.2导入项目与启动 2.2.1加载Maven设置 2.2.2配置jdk与java版本 2.2.3创建数据库 2.2…

分类预测 | Matlab实现CPO-SVM冠豪猪算法优化支持向量机多特征分类预测

分类预测 | Matlab实现CPO-SVM冠豪猪算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现CPO-SVM冠豪猪算法优化支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现CPO-SVM冠豪猪算法优化支持向量机多特征分类预测&#xff…

not support ClassForName

com.alibaba.fastjson2.JSONException: not support ClassForName : java.lang.String, you can config JSONReader.Feature.SupportClassForName 官方说明中提到默认关闭, 可通过配置开启 JSON.config(JSONReader.Feature.SupportClassForName);

(贪心 跳跃游戏)leetcode 55

题解思路&#xff1a;代码随想录--代码随想录本题题解 本题不考虑每个结点走几步只考虑范围 在nums[0]2&#xff0c;也就是在nums[1]和nums[2]找到最大范围&#xff08;for(int i0;i<cover;i)) nums[1]3,也就是在nums[2]和nums[4]这个区间范围找到最大范围&#xff0c;而因…

Unity中动态切换光照贴图LightProbe的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

leetcode 238. 除自身以外数组的乘积

题目如下 数据范围 使用两个辅助数组分别存从前乘到后面和从后到前后面再计算就行。 &#xff08;f数组没处理好还包含了本不能乘于的数所以要向后移动一位&#xff09;。通过代码 class Solution { public:vector<int> productExceptSelf(vector<int>& n…

以太坊基金会换帅,资本市场砸盘

Vitalik力挺Aya升任EF主席&#xff0c;理想主义冬日发芽&#xff1f; 作者&#xff1a;Wenser&#xff1b;编辑&#xff1a;秦晓峰 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 2 月 27 日&#xff0c;Bybit 15 亿资金被盗事件的最新调查结果将以太坊…

[含文档+PPT+源码等]精品基于Python实现的微信小程序的在线医疗咨询系统

基于Python实现的微信小程序的乡村医疗咨询系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、社会背景 医疗资源分布不均&#xff1a;在我国&#xff0c;城乡医疗资源分布不均是一个长期存在的问题。乡村地区由于地理位置偏远、经济条件有限&#xff0c;往往…

【Maven】基于IDEA进行Maven工程的创建、构建

文章目录 一、基于IDEA创建Maven工程1. 概念梳理Maven工程的GAVP2. Idea构建Maven Java SE工程3. Idea构建Maven Java Web工程3.1 创建一个maven的javase工程3.2 修改pom.xml文件打包方式3.3 设置web资源路径和web.xml路径 4. Maven工程项目结构说明 二、基于IDEA进行Maven工程…

Halcon 学习之路 生成棋盘格 set_grayval 算子

gen_imag_const 创建灰度图像 gen_image_const(Image&#xff0c;Type&#xff0c;Width&#xff0c;Height) 算子gen_image_const创建指定大小的图像&#xff0c;图像的宽度和高度由Width和Height决定 Type 像素类型 byte :每像素1字节&#xff0c;无符号&#xff08;0-255&…

一个基于C# Winform开源免费的通用快速开发框架,内置完整的权限架构!

前言 今天大姚给大家分享一个基于C# Winform开源免费&#xff08;GPL-2.0开源协议&#xff09;的通用快速开发框架&#xff0c;内置完整的权限架构&#xff1a;WinformDevFramework。 项目介绍 WinformDevFramework是一个基于C# Winform开源免费&#xff08;GPL-2.0开源协议…

通俗解释机器学习中的召回率、精确率、准确率

先说个题外话&#xff0c;暴击一下乱写博客的人&#xff0c;网络上很多地方分不清准确率和精确率&#xff0c;在这里先正确区分一下精确率和准确率&#xff0c;以及他们的别称。 切入正题 很多人分不清召回率和精确率的区别&#xff0c;即使记住了公式&#xff0c;过段时间还是…

【数据结构】二叉树(门槛极低的系统性理解)

本篇文章将进行图文讲述该种数据结构&#xff01;看完一定不会让你失望&#xff0c;好的文章不需要过多的浮夸&#xff0c;质量就是深得人心的砝码&#xff01;下面我总结了最形象的趣味理解方法&#xff0c;一遍看完终身不忘&#xff01;制作不易&#xff0c;能否一键三连呢&a…

【漫话机器学习系列】114.逻辑 Sigmoid 函数

逻辑 Sigmoid 函数详解 1. 引言 逻辑回归&#xff08;Logistic Regression&#xff09;是机器学习中常用的分类算法&#xff0c;而 Sigmoid 函数 是逻辑回归的核心数学工具。Sigmoid 函数能够将任意实数映射到 (0,1) 之间&#xff0c;因此特别适用于概率估计。在这篇文章中&a…

SpringBoot项目启动报错:PathVariable annotation was empty on param 0.

报错信息 SpringBoot项目启动报错&#xff1a;Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name com.obstetric.archive.feignclient.DictServiceClient: FactoryBean threw exception on object creation; nested excepti…

Java 设计模式:软件开发的精髓与艺

目录 一、设计模式的起源二、设计模式的分类1. 创建型模式2. 结构型模式3. 行为型模式三、设计模式的实践1. 单例模式2. 工厂模式3. 策略模式四、设计模式的优势五、设计模式的局限性六、总结在软件开发的浩瀚星空中,设计模式犹如一颗颗璀璨的星辰,照亮了开发者前行的道路。它…

Unity小功能实现:鼠标点击移动物体

1、功能描述 当玩家点击鼠标时&#xff0c;场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。 2、实现步骤 创建Unity项目&#xff1a;首先&#xff0c;打开Unity并创建一个新的3D项目。 添加3D物体&#xff1a;在场景中创建一个3D物体&am…