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

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

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

В сценариях масштабной загрузки данных, таких как аналитика журналов и мониторинг в реальном времени, традиционный механизм маршрутизации Elasticsearch может генерировать избыточные внутренние запросы переадресации по мере увеличения количества шардов индекса и пропускной способности записи. Это может привести к отклонениям записей и увеличению задержки хвоста. Для решения этой проблемы CSS предоставляет несколько способов повышения производительности загрузки: bulk routing, bulk aggregation, text indexing acceleration и merge optimization. Они помогают снизить накладные расходы производительности и значительно улучшить стабильность записи и пропускную способность в сценариях высокой нагрузки.

Как работает функция

Для балансировки производительности и функциональности CSS предоставляет четыре решения по повышению производительности загрузки. Основная идея заключается в устранении или смягчении узких мест производительности за счёт снижения межузловой коммуникации и ускорения построения индекса.

Table 1 Способы повышения производительности загрузки данных

Решение

Описание

Когда использовать

Подробности

Bulk routing

Bulk routing уменьшает межузловую коммуникацию и переадресацию запросов координатором, помогая предотвратить отклонения записей.

Как это работает: вместо маршрутизации каждого документа отдельно на основе его ID (поведение по умолчанию) эта оптимизация заставляет несколько документов в одном bulk‑запросе маршрутизироваться совместно к одному шару или локальному узлу.

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

Настройка Bulk Routing

Bulk aggregation

Пакетная агрегация снижает нагрузку системы и повышает ёмкость отдельного узла, минимизируя конкуренцию за блокировки ресурсов во время операций записи.

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

Включите эту функцию для сценариев записи с ультра‑высокой конкуренцией, где пропускная способность критична. Мы рекомендуем включать её, когда мониторинг показывает высокую загрузку CPU системы или значительное давление на выделение памяти.

Настройка пакетной агрегации

Ускорение индексации текста

Ускорение индексации текста значительно ускоряет индексацию текстовых и ключевых полей.

Как это работает: благодаря оптимизированному процессу индексации, улучшенному использованию памяти и ускоренной токенизации эта функция повышает общую эффективность обработки текста.

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

Настройка ускорения индексации текста

Оптимизация слияния

Оптимизация слияния обеспечивает стабильность записи, предотвращая ограничение записи, вызванное медленным слиянием сегментов.

Как это работает: динамически увеличивая количество потоков слияния для шардов индекса, эта функция ускоряет слияние небольших сегментов и своевременно освобождает пространство кэша записи.

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

Настройка оптимизации слияния

Ограничения

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

Вход в Kibana

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

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

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

Настройка Bulk Routing

Caution

После включения bulk routing (то есть, index.bulk_routing установлен в значение pack или local_pack), документы больше не маршрутизируются по ID. Это может повлиять на функциональность, связанную с маршрутизацией. Например, запросы GET по ID могут завершаться ошибкой, поскольку шарды не могут быть найдены.

Включите bulk routing, чтобы снизить нагрузку на переадресацию запросов для узла, получающего запросы.

PUT /{index_name}/_settings
{
"index.bulk_routing": "local_pack"
}
Table 2 Параметры bulk routing

Параметр

Тип

Значение по умолчанию

Описание

index_name

String

N/A

Указывает один или несколько индексов.

  • Один индекс: введите имя индекса, например, my_index.
  • Несколько индексов: введите несколько имен индексов и используйте запятую (,) для их разделения, например, my_index1,my_index2.
  • Подстановочный символ: используйте подстановочный символ (*) для сопоставления нескольких индексов. Например, myindex* указывает все индексы, имя которых начинается с myindex.

index.bulk_routing

String

default

Указывает внутреннюю политику маршрутизации для обработки документов в bulk write requests.

  • default: использует поведение маршрутизации по умолчанию. Каждый документ в одном bulk‑запросе хешируется и маршрутизируется отдельно на основе его _id. Это обеспечивает равномерное распределение данных по всем шардам, но может вызвать значительные накладные расходы на пересылку между узлами при масштабных bulk‑записях.
  • pack: маршрутизирует все документы в одном bulk‑запросе к одному случайно выбранному шару. Это устраняет вычисления хеша для каждого документа и пересылку между узлами, снижая нагрузку на пересылку запросов у координаторного узла.
  • local_pack (recommended): First attempts to route all documents within the same bulk request to a local shard on the data node that received the bulk request. If that node does not host a shard of the target index, it falls back to the pack mode. This option is recommended because it achieves zero cross-node forwarding.

Настройка Bulk Aggregation

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

PUT /{index_name}/_settings
{
"index.aggr_perf_batch_size": "128"
}
Table 3 Параметры bulk aggregation

Параметр

Тип

Значение по умолчанию

Описание

index.aggr_perf_batch_size

Integer

1

Указывает максимальное количество документов, обрабатываемых как один пакет.

Минимальное значение: 1 (отключает bulk aggregation, поэтому документы будут обрабатываться по отдельности)

Рекомендуемое значение: 128

Любое значение, большее 1, включает bulk aggregation. Система будет внутренне переагрегировать документы из bulk‑запросов в пакеты до указанного размера. Большие размеры пакетов увеличивают потребление памяти на пакет. Настройте этот параметр в соответствии с требованиями нагрузки и доступными системными ресурсами.

Фактическое количество документов в пакете рассчитывается как: MIN(Number of documents within the bulk request, aggr_perf_batch_size)

Настройка Text Indexing Acceleration

Caution

Text indexing acceleration нельзя включить для индексов, чье отображение содержит вложенные поля. Система не сможет запустить ускорение из‑за проблем совместимости.

Включите text indexing acceleration, чтобы ускорить индексацию текстовых и ключевых полей.

PUT /{index_name}/_settings
{
"index.native_speed_up": true,
"index.native_analyzer": true
}
Table 4 Параметры для text indexing acceleration

Parameter

Type

Default Value

Description

index.native_speed_up

Boolean

false

Whether to enable text indexing acceleration.

The value can be:

  • true: Enables text indexing acceleration. This will significantly accelerate the indexing of text and keyword fields, optimize memory usage during indexing, and reduces the frequency of garbage collection (GC) caused by high-frequency writes.
  • false: Disables text indexing acceleration.

index.native_analyzer

Boolean

false

Нужно ли включать ускорение токенизации.

Этот параметр доступен только когда index.native_speed_up установлен в true, и применяется только к текстовым полям.

Значение может быть:

  • true: Включает ускорение токенизации. Это значительно сократит время CPU, затрачиваемое на токенизацию.
  • false: Отключает ускорение токенизации.

Настройка оптимизации слияния

Увеличьте количество потоков, используемых для слияния сегментов в шардах индекса. Это помогает предотвратить ограничение записи, вызванное медленным слиянием сегментов.

PUT /{index_name}/_settings
{
"index.merge.scheduler.max_thread_count": 8
}
Table 5 Параметры слияния сегментов

Параметр

Тип

Значение по умолчанию

Описание

index.merge.scheduler.max_thread_count

Целое

4

Указывает максимальное количество потоков, используемых для segment merging в одном shard.

Диапазон значений: от 1 до (Number of CPU cores on the node/2)

Рекомендуемое значение — 8. Оно позволяет ускорить segment merging, используя многопоточную архитектуру CPU, устраняя ограничение записи, вызванное медленным segment merging. Однако необходимо убедиться, что узлы кластера имеют достаточное количество CPU‑ядер для выполнения этих потоков.