Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›Потоки данных ›Жизненный цикл потока данных

Учебник: Удержание потоков данных

В этом руководстве мы рассмотрим срок хранения потоков данных; мы определим его, рассмотрим, как его можно настроить и как он применяется. Имейте в виду, что следующие параметры применяются только к потокам данных, управляемым циклом жизни потока данных.

  1. Что такое хранение потока данных?
  2. Как настроить хранение?
  3. Как вычисляется эффективный срок хранения?
  4. Как применяется эффективный срок хранения?

Вы можете проверить, управляется ли поток данных циклом жизни потока данных, с помощью API для получения цикла жизни потока данных:

resp = client.indices.get_data_lifecycle(
    name="my-data-stream",
)
print(resp)
response = client.indices.get_data_lifecycle(
  name: 'my-data-stream'
)
puts response
const response = await client.indices.getDataLifecycle({
  name: "my-data-stream",
});
console.log(response);
GET _data_stream/my-data-stream/_lifecycle

Результат должен выглядеть следующим образом:

{
  "data_streams": [
    {
      "name": "my-data-stream",                                   
      "lifecycle": {
        "enabled": true                                           
      }
    }
  ]
}

Имя вашего потока данных.

Убедитесь, что цикл жизни включён, то есть это должно быть true.

Что такое хранение потока данных?

Мы определяем хранение как минимальный период времени, в течение которого данные потока данных будут храниться в Elasticsearch. По истечении этого периода Elasticsearch разрешается удалить эти данные, чтобы освободить место и/или управлять затратами.

Хранение не определяет период удаления данных, а минимальный период их хранения.

Мы определяем 4 разных типа хранения:

  • Хранение потока данных, или data_retention, которое задаётся для потока данных. Его можно установить в шаблоне индекса для будущих потоков данных или с помощью API PUT data stream lifecycle для существующего потока данных. Если хранение потока данных не задано, это подразумевает, что данные должны храниться вечно.
  • Глобальное хранение по умолчанию, назовем его default_retention, которое настраивается с помощью параметра кластера data_streams.lifecycle.retention.default и применяется ко всем потокам данных, управляемым циклом жизни потока данных, у которых не задано data_retention. В сущности, это гарантирует, что не будет потоков данных, хранящих данные вечно. Это можно установить с помощью API для обновления настроек кластера.
  • Глобальный максимальный срок хранения, назовем его max_retention, который настраивается с помощью параметра кластера data_streams.lifecycle.retention.max и применяется ко всем потокам данных, управляемым циклом жизни потока данных. В сущности, это гарантирует, что срок хранения ни для одного потока данных не превысит этот период. Это можно установить с помощью API для обновления настроек кластера.
  • Эффективное хранение, или effective_retention, которое применяется к потоку данных в данный момент. Эффективное хранение нельзя задать, оно выводится, учитывая все настроенные типы хранения, и рассчитывается, как описано здесь.

Глобальное хранение по умолчанию и максимальное хранение не применяются к внутренним потокам данных elastic. Внутренние потоки данных распознаются по значению флага system, установленного в true, или если их имя начинается с точки (.).

Как настроить хранение?

  • Установив data_retention на уровне потока данных. Это хранение можно настроить двумя способами:

    — Для новых потоков данных оно может быть определено в шаблоне индекса, который будет применён при создании потока данных. Вы можете использовать API для создания шаблона индекса, например:

    resp = client.indices.put_index_template(
        name="template",
        index_patterns=[
            "my-data-stream*"
        ],
        data_stream={},
        priority=500,
        template={
            "lifecycle": {
                "data_retention": "7d"
            }
        },
        meta={
            "description": "Template with data stream lifecycle"
        },
    )
    print(resp)
    const response = await client.indices.putIndexTemplate({
      name: "template",
      index_patterns: ["my-data-stream*"],
      data_stream: {},
      priority: 500,
      template: {
        lifecycle: {
          data_retention: "7d",
        },
      },
      _meta: {
        description: "Template with data stream lifecycle",
      },
    });
    console.log(response);
    PUT _index_template/template
    {
      "index_patterns": ["my-data-stream*"],
      "data_stream": { },
      "priority": 500,
      "template": {
        "lifecycle": {
          "data_retention": "7d"
        }
      },
      "_meta": {
        "description": "Template with data stream lifecycle"
      }
    }

    — Для существующего потока данных оно может быть установлено с помощью API PUT для цикла жизни потока данных.

    resp = client.indices.put_data_lifecycle(
        name="my-data-stream",
        data_retention="30d",
    )
    print(resp)
    response = client.indices.put_data_lifecycle(
      name: 'my-data-stream',
      body: {
        data_retention: '30d'
      }
    )
    puts response
    const response = await client.indices.putDataLifecycle({
      name: "my-data-stream",
      data_retention: "30d",
    });
    console.log(response);
    PUT _data_stream/my-data-stream/_lifecycle
    {
      "data_retention": "30d" 
    }

    Срок хранения этого потока данных установлен на 30 дней.

  • Установив глобальное хранение с помощью data_streams.lifecycle.retention.default и/или data_streams.lifecycle.retention.max, которые задаются на уровне кластера. Их можно задать с помощью API для обновления настроек кластера. Например:

    resp = client.cluster.put_settings(
        persistent={
            "data_streams.lifecycle.retention.default": "7d",
            "data_streams.lifecycle.retention.max": "90d"
        },
    )
    print(resp)
    const response = await client.cluster.putSettings({
      persistent: {
        "data_streams.lifecycle.retention.default": "7d",
        "data_streams.lifecycle.retention.max": "90d",
      },
    });
    console.log(response);
    PUT /_cluster/settings
    {
      "persistent" : {
        "data_streams.lifecycle.retention.default" : "7d",
        "data_streams.lifecycle.retention.max" : "90d"
      }
    }

Как вычисляется эффективный срок хранения?

Эффективный срок хранения вычисляется следующим образом:

  • effective_retention — это default_retention, когда default_retention определено, а у потока данных нет data_retention.
  • effective_retention — это data_retention, когда data_retention определено, и если max_retention определено, оно меньше, чем max_retention.
  • effective_retention — это max_retention, когда max_retention определено, и поток данных либо не имеет data_retention, либо его data_retention больше, чем max_retention.

Приведённые выше примеры продемонстрированы ниже:

default_retention max_retention data_retention effective_retention Определённое хранение

Не задано

Не задано

Не задано

Бесконечное

Н/Д

Неактуально

12 месяцев

30 дней

30 дней

data_retention

Неактуально

Не задано

30 дней

30 дней

data_retention

30 дней

12 месяцев

Не задано

30 дней

default_retention

30 дней

30 дней

Не задано

30 дней

default_retention

Неактуально

30 дней

12 месяцев

30 дней

max_retention

Не задано

30 дней

Не задано

30 дней

max_retention

Взяв наш пример, если мы получим цикл жизни my-data-stream:

resp = client.indices.get_data_lifecycle(
    name="my-data-stream",
)
print(resp)
response = client.indices.get_data_lifecycle(
  name: 'my-data-stream'
)
puts response
const response = await client.indices.getDataLifecycle({
  name: "my-data-stream",
});
console.log(response);
GET _data_stream/my-data-stream/_lifecycle

Мы видим, что оно останется таким же, как настроенное пользователем:

{
  "global_retention" : {
    "max_retention" : "90d",                                   
    "default_retention" : "7d"                                 
  },
  "data_streams": [
    {
      "name": "my-data-stream",
      "lifecycle": {
        "enabled": true,
        "data_retention": "30d",                                
        "effective_retention": "30d",                           
        "retention_determined_by": "data_stream_configuration"  
      }
    }
  ]
}

Максимальное время хранения, настроенное в кластере.

Значение хранения по умолчанию, настроенное в кластере.

Запрошенное время хранения для этого потока данных.

Время хранения, применяемое жизненным циклом потока данных для этого потока данных.

Настройка, определяющая эффективное время хранения. В данном случае это data_configuration, потому что оно меньше, чем max_retention.

Как применяется эффективное время хранения?

Время хранения применяется к оставшимся базовым индексам потока данных в качестве последнего шага запуска жизненного цикла потока данных. Жизненный цикл потока данных получит базовые индексы, чьё generation_time больше, чем период эффективного хранения, и удалит их. generation_time применимо только к перероллированным базовым индексам и представляет собой либо время, прошедшее с момента перероллирования базового индекса, либо время, настроенное необязательно в настройке index.lifecycle.origination_date.

Мы используем generation_time вместо времени создания, поскольку это гарантирует, что все данные в базовом индексе прошли период хранения. В результате, период хранения — это не точное время удаления данных, а минимальное время хранения данных.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/tutorial-manage-data-stream-retention.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API