Как работают контрольные точки преобразования
Каждый раз, когда преобразование анализирует исходные индексы и создаёт или обновляет целевой индекс, оно генерирует контрольную точку.
Если ваше преобразование выполняется только один раз, то логически существует только одна контрольная точка. Однако, если преобразование выполняется непрерывно, оно создаёт контрольные точки по мере поглощения и преобразования новых исходных данных. Свойство sync конфигурации преобразования настраивает создание контрольных точек, определяя поле времени.
Для создания контрольной точки непрерывное преобразование:
-
Проверяет изменения в исходных индексах.
Используя простой периодический таймер, преобразование проверяет изменения в исходных индексах. Эта проверка выполняется на основе интервала, определённого в свойстве
frequencyпреобразования.Если исходные индексы не изменились или если уже выполняется создание контрольной точки, оно ждёт следующего таймера.
Если изменения обнаружены, создаётся контрольная точка.
-
Определяет, какие сущности и/или временные корзины изменились.
Преобразование ищет, какие сущности или временные корзины изменились между последней и новой контрольными точками. Преобразование использует эти значения для синхронизации исходных и целевых индексов с помощью меньшего количества операций, чем полное перевыполнение.
-
Обновляет целевой индекс (фрейм данных) с изменениями.
Преобразование применяет изменения, связанные с новыми или изменёнными сущностями или временными корзинами, к целевому индексу. Набор изменений может быть постраничен. Преобразование выполняет составную агрегацию аналогично операции пакетного преобразования, однако оно также вставляет фильтры запросов на основе предыдущего шага, чтобы уменьшить объём работы. После применения всех изменений контрольная точка завершается.
Этот процесс создания контрольных точек включает как операции поиска, так и индексирования в кластере. Мы стремились к контролю производительности при разработке преобразований. Мы посчитали предпочтительным, чтобы преобразование выполнялось дольше, вместо того, чтобы завершиться быстро и занимать приоритет в потреблении ресурсов. Тем не менее, кластеру всё равно необходимы достаточные ресурсы для поддержки как составного агрегационного поиска, так и индексирования его результатов.
Если кластер испытывает ненадлежащее снижение производительности из-за преобразования, остановите преобразование и обратитесь к условиям производительности.
Использование метки времени поглощения для синхронизации преобразования
В большинстве случаев настоятельно рекомендуется использовать метку времени поглощения исходных индексов для синхронизации преобразования. Это наиболее оптимальный способ для преобразований идентифицировать новые изменения. Если ваш источник данных соответствует стандарту ECS, у вас может быть поле event.ingested. В этом случае используйте event.ingested в качестве свойства sync.time.field вашего преобразования.
Если у вас нет поля event.ingested или оно не заполнено, вы можете установить его, используя конвейер поглощения. Создайте конвейер поглощения, используя API конвейера поглощения (например, как показано ниже) или через Kibana в разделе Управление стеком > Конвейеры поглощения. Используйте set процессор для установки поля и свяжите его со значением метки времени поглощения.
resp = client.ingest.put_pipeline(
id="set_ingest_time",
description="Set ingest timestamp.",
processors=[
{
"set": {
"field": "event.ingested",
"value": "{{{_ingest.timestamp}}}"
}
}
],
)
print(resp) response = client.ingest.put_pipeline(
id: 'set_ingest_time',
body: {
description: 'Set ingest timestamp.',
processors: [
{
set: {
field: 'event.ingested',
value: '{{{_ingest.timestamp}}}'
}
}
]
}
)
puts response const response = await client.ingest.putPipeline({
id: "set_ingest_time",
description: "Set ingest timestamp.",
processors: [
{
set: {
field: "event.ingested",
value: "{{{_ingest.timestamp}}}",
},
},
],
});
console.log(response); PUT _ingest/pipeline/set_ingest_time
{
"description": "Set ingest timestamp.",
"processors": [
{
"set": {
"field": "event.ingested",
"value": "{{{_ingest.timestamp}}}"
}
}
]
} После создания конвейера поглощения примените его к исходным индексам вашего преобразования. Конвейер добавляет поле event.ingested ко всем документам со значением метки времени поглощения. Настройте свойство sync.time.field вашего преобразования для использования этого поля, используя API создания преобразования для новых преобразований или API обновления преобразования для существующих преобразований. Поле event.ingested используется для синхронизации преобразования.
Дополнительную информацию о использовании конвейера поглощения см. в разделах Добавление конвейера к запросу индексирования и Конвейеры поглощения.
Эвристика обнаружения изменений
Когда преобразование выполняется в непрерывном режиме, оно обновляет документы в целевом индексе по мере поступления новых данных. Преобразование использует набор эвристик, называемых обнаружением изменений, для обновления целевого индекса с помощью меньшего количества операций.
В данном примере данные сгруппированы по именам хостов. Обнаружение изменений определяет, какие имена хостов изменились, например, хосты A, C и G, и обновляет только документы с этими хостами, но не обновляет документы, хранящие информацию о хостах B, D или любом другом неизменённом хосте.
Другая эвристика может применяться для временных корзин, когда используется date_histogram для группировки по временным корзинам. Обнаружение изменений определяет, какие временные корзины изменились, и обновляет только их.
Обработка ошибок
Ошибки в преобразованиях, как правило, связаны с поиском или индексированием. Для повышения устойчивости преобразований позиции курсоров составного поиска и поиска изменённых сущностей отслеживаются в памяти и периодически сохраняются.
Ошибки контрольных точек можно разделить на следующие категории:
- Временные ошибки: контрольная точка повторно пытается выполнить операцию. Если произойдёт 10 последовательных ошибок, преобразование получает статус ошибки. Например, эта ситуация может возникнуть при сбоях фрагментов и когда запросы возвращают только частичные результаты.
- Невосстановимые ошибки: преобразование немедленно завершается с ошибкой. Например, такая ситуация возникает, когда исходный индекс не найден.
- Ошибки корректировки: преобразование повторно пытается выполнить операцию с изменёнными параметрами. Например, если при составной агрегации возникают ошибки памяти родительского прерывателя цепи, преобразование получает частичные результаты. Составной поиск повторно выполняется с меньшим количеством корзин. Эта повторная попытка выполняется с интервалом, определённым в свойстве
frequencyдля преобразования. Если поиск повторно выполняется до минимального количества корзин, возникает невосстановимая ошибка.
Если узел, выполняющий преобразования, выходит из строя, преобразование перезапускается с последней сохранённой позиции курсора. Этот процесс восстановления может повторить некоторые операции, которые преобразование уже выполнило, но он гарантирует согласованность данных.
© 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/transform-checkpoints.html