В сценариях масштабной загрузки данных, таких как аналитика журналов и мониторинг в реальном времени, традиционный механизм маршрутизации Elasticsearch может генерировать избыточные внутренние запросы переадресации по мере увеличения количества шардов индекса и пропускной способности записи. Это может привести к отклонениям записей и увеличению задержки хвоста. Для решения этой проблемы CSS предоставляет несколько способов повышения производительности загрузки: bulk routing, bulk aggregation, text indexing acceleration и merge optimization. Они помогают снизить накладные расходы производительности и значительно улучшить стабильность записи и пропускную способность в сценариях высокой нагрузки.
Для балансировки производительности и функциональности CSS предоставляет четыре решения по повышению производительности загрузки. Основная идея заключается в устранении или смягчении узких мест производительности за счёт снижения межузловой коммуникации и ускорения построения индекса.
Решение | Описание | Когда использовать | Подробности |
|---|---|---|---|
Bulk routing | Bulk routing уменьшает межузловую коммуникацию и переадресацию запросов координатором, помогая предотвратить отклонения записей. Как это работает: вместо маршрутизации каждого документа отдельно на основе его ID (поведение по умолчанию) эта оптимизация заставляет несколько документов в одном bulk‑запросе маршрутизироваться совместно к одному шару или локальному узлу. | Включите эту функцию для масштабных кластеров с большим количеством шардов. Она особенно эффективна, когда пропускная способность bulk‑запросов настолько высока, что исчерпывает сетевой ввод‑вывод или ресурсы CPU координаторного узла. | |
Bulk aggregation | Пакетная агрегация снижает нагрузку системы и повышает ёмкость отдельного узла, минимизируя конкуренцию за блокировки ресурсов во время операций записи. Как это работает: вместо обработки документов по отдельности в рамках одного bulk‑запроса система обрабатывает их как единый пакет, уменьшая выделения памяти и конкуренцию за блокировки. | Включите эту функцию для сценариев записи с ультра‑высокой конкуренцией, где пропускная способность критична. Мы рекомендуем включать её, когда мониторинг показывает высокую загрузку CPU системы или значительное давление на выделение памяти. | |
Ускорение индексации текста | Ускорение индексации текста значительно ускоряет индексацию текстовых и ключевых полей. Как это работает: благодаря оптимизированному процессу индексации, улучшенному использованию памяти и ускоренной токенизации эта функция повышает общую эффективность обработки текста. | Включите эту функцию, когда требуется высокоскоростное построение индекса с относительно простой логикой токенизации. Примеры таких сценариев включают аудит журналов и полнотекстовый поиск, где задействованы тексты большого объёма и многочисленные ключевые поля. | |
Оптимизация слияния | Оптимизация слияния обеспечивает стабильность записи, предотвращая ограничение записи, вызванное медленным слиянием сегментов. Как это работает: динамически увеличивая количество потоков слияния для шардов индекса, эта функция ускоряет слияние небольших сегментов и своевременно освобождает пространство кэша записи. | Включите эту функцию в сценариях записи с высокой частотой, особенно когда пропускная способность записи резко возрастает после включения трёх вышеуказанных оптимизаций, и записи становятся нестабильными из‑за ограничения слияния. |
Только кластеры Elasticsearch 7.10.2 поддерживают улучшение производительности ingest данных.
Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этой теме в качестве примера используется Kibana для описания процедур выполнения.
Левая часть консоли представляет собой поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
После включения bulk routing (то есть, index.bulk_routing установлен в значение pack или local_pack), документы больше не маршрутизируются по ID. Это может повлиять на функциональность, связанную с маршрутизацией. Например, запросы GET по ID могут завершаться ошибкой, поскольку шарды не могут быть найдены.
Включите bulk routing, чтобы снизить нагрузку на переадресацию запросов для узла, получающего запросы.
PUT /{index_name}/_settings{"index.bulk_routing": "local_pack"}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
index_name | String | N/A | Указывает один или несколько индексов.
|
index.bulk_routing | String | default | Указывает внутреннюю политику маршрутизации для обработки документов в bulk write requests.
|
Включите bulk aggregation, чтобы система обрабатывала документы в каждом bulk‑запросе как единый пакет, а не обрабатывала каждый документ отдельно. Это значительно снижает нагрузку на CPU и конкуренцию за блокировки при операциях записи с ультра‑высокой параллельностью.
PUT /{index_name}/_settings{"index.aggr_perf_batch_size": "128"}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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 нельзя включить для индексов, чье отображение содержит вложенные поля. Система не сможет запустить ускорение из‑за проблем совместимости.
Включите text indexing acceleration, чтобы ускорить индексацию текстовых и ключевых полей.
PUT /{index_name}/_settings{"index.native_speed_up": true,"index.native_analyzer": true}
Parameter | Type | Default Value | Description |
|---|---|---|---|
index.native_speed_up | Boolean | false | Whether to enable text indexing acceleration. The value can be:
|
index.native_analyzer | Boolean | false | Нужно ли включать ускорение токенизации. Этот параметр доступен только когда index.native_speed_up установлен в true, и применяется только к текстовым полям. Значение может быть:
|
Увеличьте количество потоков, используемых для слияния сегментов в шардах индекса. Это помогает предотвратить ограничение записи, вызванное медленным слиянием сегментов.
PUT /{index_name}/_settings{"index.merge.scheduler.max_thread_count": 8}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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‑ядер для выполнения этих потоков. |