Облачная платформаAdvanced

Повышение производительности поглощения данных в кластерах Elasticsearch

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Обзор

Эта уникальная CSS‑фича значительно повышает производительность поглощения данных и снижает количество отклонений записей за счёт оптимизации bulk‑маршрутизации, ускорения текстовых индексов и ускорения сегментации слов. Рекомендуется использовать эту функцию для кластеров, содержащих большое количество шардов индексов и текстовых индексов, либо имеющих высокий входящий объём данных.

Таблица 1 Способы улучшения производительности поглощения данных

Метод

Описание

Подробности

Оптимизация bulk‑маршрутизации

Согласно правилу маршрутизации по умолчанию в Elasticsearch, каждый фрагмент данных в bulk‑запросе направляется к различному шарду. При записи большого объёма данных и наличии большого количества шардов индекса избыточная внутренняя переадресация запросов может привести к отклонению bulk‑запросов. Кроме того, в масштабных кластерах эффект длинного хвоста вызывает высокую задержку bulk‑запросов.

Вы можете указать index.bulk_routing элемент конфигурации для включения оптимизации массовой маршрутизации. Вы можете использовать его, чтобы уменьшить количество запросов, которые необходимо перенаправлять внутри системы. Для кластера с большим количеством шардов эта настройка может повысить производительность записи и снизить отклонения bulk.

Оптимизация агрегирования bulk

Вы можете указать index.aggr_perf_batch_size элемент конфигурации для включения или отключения оптимизации агрегирования bulk. Когда оптимизация агрегирования bulk включена, документы в bulk‑запросе записываются пакетами, а не по отдельности. Это помогает сократить накладные расходы на запросы памяти, запросы блокировок и другие вызовы, улучшая производительность поглощения данных.

Ускорение текстового индекса

Вы можете настроить index.native_speed_up для включения или отключения ускорения текстового индекса. Эта настройка оптимизирует процесс индексирования и доступ к памяти, ускоряя построение индекса для текстовых полей (text и keyword). Когда ускорение текстового индекса включено, вы можете настроить index.native_analyzer для включения ускорения сегментации слов также. Для текстов, которым нужна общая сегментация слов, вы можете использовать анализатор для ускорения сегментации слов.

Оптимизация задачи слияния индексов

Включение трех вышеуказанных параметров оптимизации увеличит количество задач слияния индексов в кластере. Вы можете настроить index.merge.scheduler.max_thread_count для снижения влияния задач слияния индексов на производительность ingest данных. Оптимизация заключается в увеличении количества потоков слияния шардов, что облегчает ограничение импорта данных.

Ограничения

Только кластеры Elasticsearch 7.10.2 поддерживают улучшение производительности ingest данных.

Предварительные требования

Целевой кластер доступен.

Вход в Kibana

Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этом разделе Kibana используется в качестве примера для описания процедур эксплуатации.

  1. Войдите в консоль управления CSS.
  2. В навигационной панели слева выберите Clusters > Elasticsearch.
  3. В списке кластеров найдите целевой кластер и нажмите Kibana в Операция столбце, чтобы войти в консоль Kibana.
  4. В левой навигационной панели выберите Dev Tools.

    Левая часть консоли — это поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть показывает результат выполнения.

Bulk Route Optimization

Вы можете указать index.bulk_routing элемент конфигурации для включения bulk route optimization. Вы можете использовать его, чтобы уменьшить количество запросов, которые нужно перенаправлять внутри системы. Для кластера с большим числом shards эта настройка может улучшить производительность записи и снизить отклонение bulk

Caution

After bulk route optimization is enabled (that is, index.bulk_routing установлено в pack или local_pack), запись данных больше не маршрутизируется на основе _id, и routing-related functionality may be affected. For example, ID-based GET requests may fail.

Выполните следующую команду для включения bulk route optimization:

PUT my_index
{
"settings": {
"index.bulk_routing": "local_pack"
}
}

Параметры для index.bulk_routing элемента конфигурации перечислены ниже:

  • по умолчанию: Используйте механизм маршрутизации по умолчанию. Записи в bulk‑запросе разделяются, а затем маршрутизируются отдельно.
  • пакет: Все данные одного bulk‑запроса случайным образом маршрутизируются к одному шару.
  • local_pack: Данные одного bulk‑запроса маршрутизируются к локальному шару дата‑ноды, получившей bulk‑запрос. Если нода не содержит соответствующий индексный шар, данные случайным образом маршрутизируются к другой ноде, содержащей индексный шар. Это решение зависит от случайного распределения клиентских bulk‑запросов и сбалансированного распределения первичных шаров.

Оптимизация пакетной агрегации

Вы можете указать index.aggr_perf_batch_size элемент конфигурации для включения или отключения оптимизации пакетной агрегации. Когда оптимизация пакетной агрегации включена, документы в bulk‑запросе записываются пакетами, а не по отдельности. Это помогает уменьшить накладные расходы на запросы памяти, запросы блокировок и другие вызовы, повышая производительность загрузки данных.

Выполните следующую команду, чтобы включить оптимизацию пакетной агрегации:

PUT my_index
{
"settings": {
"index.aggr_perf_batch_size": "128"
}
}

Диапазон значений index.aggr_perf_batch_size элемент конфигурации имеет значение [1, Integer.MAX_VALUE]. Значение по умолчанию — 1, что указывает на то, что оптимизация пакетной агрегации отключена. Если значение больше 1, оптимизация пакетной агрегации включена, значение MIN(bulk_doc_size, aggr_perf_batch_size) указывает размер пакета.

Ускорение текстового индекса

Вы можете настроить index.native_speed_up чтобы включить или отключить ускорение текстового индекса. Эта настройка оптимизирует процесс индексации и доступ к памяти для ускорения построения индекса для текстовых полей (text и keyword). Когда ускорение текстового индекса включено, вы можете настроить index.native_analyzer чтобы также включить ускорение сегментации слов. Для текстов, которым требуется обычная сегментация слов, вы можете использовать анализатор для ускорения сегментации слов.

Caution
  • Ускорение сегментации слов можно включить (установив index.native_analyzer к true) только когда ускорение текстового индекса включено (установите index.native_speed_up к true). Иначе ускорение сегментации слов не будет действовать.
  • Ускорение текстового индекса нельзя включить для индексов, содержащих вложенные поля.

Выполните следующую команду, чтобы включить ускорение текстового индекса:

PUT my_index
{
"settings": {
"index.native_speed_up": true,
"index.native_analyzer": true
}
}

Значения index.native_speed_up и index.native_analyzer являются true или false. Значение по умолчанию false.

Оптимизация задач слияния индексов

Включение трех вышеуказанных параметров оптимизации увеличит количество задач слияния индексов в кластере. Вы можете настроить index.merge.scheduler.max_thread_count чтобы уменьшить влияние задач слияния индексов на производительность загрузки данных. Оптимизация заключается в увеличении количества потоков слияния шардов, что позволяет смягчить ограничение импорта данных.

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

PUT my_index
{
"settings": {
"index.merge.scheduler.max_thread_count": 8
}
}

Диапазон значений index.merge.scheduler.max_thread_count равен [1, node.processors/2]. Значение по умолчанию — 4, рекомендованное значение — 8.