Bulk indexing

Тема дорожной карты · Elasticsearch

Массовое индексирование в Elasticsearch — это практика эффективной отправки больших объёмов документов в поисковый движок путём группировки записей через Bulk API по адресу POST /_bulk, а не отправки по одному запросу на документ. Для максимизации пропускной способности массового индексирования операторы обычно увеличивают настройку index.refresh_interval (например, до 30s или -1 при первоначальной загрузке), чтобы Elasticsearch не сбрасывал новые сегменты на диск после каждого пакета. Временное отключение реплик через index.number_of_replicas: 0 во время первоначальной загрузки с последующим их включением — ещё одна распространённая оптимизация массового индексирования, поскольку репликация шардов создаёт дополнительную нагрузку на запись. Давление на кучу JVM является ключевой проблемой при массовом индексировании: мониторинг сборки мусора с помощью GET /_nodes/stats и удержание использования кучи ниже 75 % предотвращает отклонения запросов из-за срабатывания автоматических ограничителей. Производительность массового индексирования занимает центральное место в пригодности Elasticsearch для высокопроизводительного приёма данных в рамках Elastic Stack вместе с Logstash и Beats.

Как это работает

Bulk indexing: JVM тюнинг — heap = 50% RAM, max 31GB (граница compressed oops), G1GC на современных JDK. Bulk indexing — отключите refresh во время bulk (-1), увеличьте translog flush threshold, batch 5-15MB. Search optimisation — filter context (cacheable), ограничивайте specific индексами через aliases, избегайте wildcards на big-индексах, profile API для slow queries. Мониторинг через Stack Monitoring app (или Prometheus exporter — prometheus-es-exporter).

Когда применять

Меряйте до тюнинга — profile API + slow log для идентификации проблем. Для ingest bottleneck: больше bulk batches + больше клиентов + refresh off. Для search bottleneck: cache (filter context), trim полей через _source filtering, force-merge cold-индексов. Для cluster stability: dedicate роли, тюньте thread_pool sizes, мониторьте circuit_breakers.

Типичные ошибки

Ловушки Bulk indexing: heap = 100% RAM (нет OS file cache — медленные queries); heap > 32GB (теряет compressed oops); выключают refresh + забывают включить обратно; force-merge hot-индексов (locks + I/O storm).

Связанные понятия

Полезные ресурсы