2014-12-09 3 views
36

Я сравниваю 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. 1 индекс, 60 черепков (без реплик).
  2. 3 индекса, с 20 осколками каждый (без реплик).

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

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

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

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

Мои вопросы заключаются в следующем:

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

Какова временная область памяти процесса? стабилизируется ли скорость 15 к/с или она продолжает падать? что происходит с/с диска? (на linux, некоторые из них доступны с ps или сверху, некоторые с strace) – Andras

+1

Я не помню точный объем памяти, будет обновляться завтра. Тем не менее, я помню довольно полезную диаграмму кучи головоломки. Скорость индексации, по-видимому, стабилизируется со скоростью 15 к/с, однако для проверки этого потребуется несколько часов. На каждой машине служба elasticsearch выполняет запись порядка 2MG/s (изначально - ее намного меньше, когда скорость исчезает), и когда занят диск, читается 50 - 80 MG/s. – Roman

+1

Вы указываете ключи для документов или разрешаете Elasticsearch генерировать идентификаторы автоматически? Вы пробовали использовать меньше осколков? –

ответ

36

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

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

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

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

+4

Спасибо, что поделились своими исследованиями, @ Roman. Я думаю, что стоит перепроверять версии 2.0, так как в соответствии с обновленным «Соображениями производительности для индексации Elasticsearch 2.0» - оптимизация автоматического идентификатора была удалена в версии 2.0. https: //www.elastic.co/blog/performance-indexing-2-0 – mork

+0

Хотя ваш выбор идентификатора doc может повлиять на производительность: http://blog.mikemccandless.com/2014/05/choosing-fast-unique-identifier-uuid.html (это приведена в приведенной выше статье) – JCoster22

Смежные вопросы