Подтвердить что ты не робот

ElasticSearch - высокая пропускная способность индексации

Я сравниваю ElasticSearch с очень высокой пропускной способностью индексирования.

Моя текущая цель - иметь возможность индексировать 3 миллиарда (3 000 000 000) документов в течение нескольких часов. Для этой цели у меня в настоящее время есть 3 серверных сервера Windows с 16 ГБ оперативной памяти и 8 процессоров каждый. Вставляемые документы имеют очень простое отображение, содержащее только несколько числовых непроанализированных полей (_all отключено).

Я могу достичь примерно 120 000 запросов индекса в секунду (мониторинг с использованием большого стола), используя эту относительно скромную установку, и я уверен, что пропускная способность может быть увеличена еще больше. Я использую несколько клиентов .net NEST для отправки запросов на массовое рассылку индексов, причем в нем используется 1500 операций индекса.

К сожалению, пропускная способность 120 тыс. запросов в секунду не длится очень долго, и скорость постепенно уменьшается, а через пару часов уменьшается до ~ 15 к.

Мониторинг машин показывает, что процессор не является узким местом. Однако время простоя физического диска (не SSD), кажется, падает на всех машинах, что составляет менее 15% бездействия.

Настройка refresh_interval до 60 с, чем до 300 с, и, наконец, 15 м, похоже, мало помогли. Шпионя на одном транслоге в одном осколке, показал, что трансляк сбрасывается каждые 30 минут, до достижения 200 МБ.

Я попытался использовать две стратегии осколки:

  • 1, с 60 осколками (без реплик).
  • 3 индекса, по 20 осколков каждый (без реплик).

Обе попытки приводят к довольно похожему опыту, который, я думаю, имеет смысл, поскольку он имеет такое же количество осколков.

Глядя на сегменты, я вижу, что большинство осколков имеют ~ 30 зафиксированных сегментов и аналогичное количество сегментов с возможностью поиска. Размер сегмента варьируется. В свое время попытка оптимизации индекса с max_num_segments = 1, похоже, немного помогла после его завершения (потребовалось много времени).

В любой момент, начиная с самого начала, после удаления всех использованных индексов и создания новых, это приводит к такому же поведению. Первоначально высокая пропускная способность индекса, но постепенно уменьшающаяся, задолго до достижения цели в 3 миллиарда документов. Размер индекса за это время составляет около 120 ГБ.

Я использую версию ElasticSearch 1.4. Xms и Xmx настроены на 8192 МБ, 50% доступной памяти. Буфер индексирования установлен на 30%.

Мои вопросы таковы:

  • Предполагая, что диск в настоящее время является узким местом этой установки, является ли это явление постепенного увеличения использования диска нормальным? Если нет, что можно сделать, чтобы отрицать эти эффекты?
  • Есть ли какая-то тонкая настройка, которую я могу сделать, чтобы увеличить пропускную способность индексации? Нужно ли мне? или я должен просто масштабироваться.
4b9b3361

Ответ 1

Короче говоря, я закончил с 5 виртуальными машинами linux, 8 CPU, 16 GB, используя марионетку для развертывания elasticsearch. Мои документы немного побольше, но так же и скорость throuhgput (слегка). В среднем я смог достичь 150 тыс. Запросов индекса в секунду, индексируя 1 млрд документов за 2 часа. Пропускная способность не является постоянной, и я наблюдал аналогичное снижение пропускной способности, как и раньше, но в меньшей степени. Поскольку я буду использовать ежедневные индексы для такого же объема данных, я бы ожидал, что эти показатели производительности будут примерно одинаковыми с каждым днем.

Переход от Windows-машин к Linux был обусловлен прежде всего удобством и соответствием IT-соглашениям. Хотя я не знаю точно, я подозреваю, что те же результаты могут быть достигнуты и на окнах.

В нескольких моих испытаниях я попытался индексировать без указания идентификаторов документов, как предположил Христиан Далквист. Результаты были поразительными. Я наблюдал увеличение пропускной способности значительный, достигнув в некоторых случаях 300 кБ и выше. Вывод этого очевиден: не указывать идентификаторы документов, если только вам это не нужно.

Кроме того, я использую меньше осколков на машину, что также способствовало увеличению пропускной способности.