В наших предыдущих блогах мы узнали, что такое Apache Druid и Apache Pinot. И сегодня мы поговорим о сходствах и различиях между ними, а также о вариантах использования, чтобы помочь вам понять, какой сценарий больше благоприятствует Друиду и наоборот.

Подводя итог, можно сказать, что Apache Druid — это база данных с открытым исходным кодом, работающая в режиме реального времени, которая расширяет возможности современных аналитических приложений с запросами OLAP к данным о событиях. С другой стороны, Apache Pinot — это распределенное хранилище данных OLAP в реальном времени, созданное для предоставления результатов по запросам OLAP с малой задержкой.

Но и в Apache Druid, и в Apache Pinot есть гораздо больше. Итак, приступим!

Сходства между Apache Druid и Apache Pinot

Apache Druid и Apache Pinot принципиально похожи, поскольку они хранят данные и обрабатывают запросы на одних и тех же узлах, что отличается от несвязанной архитектуры BigQuery. У Druid и Pinot есть свой формат хранения данных с индексами, они тесно связаны со своими механизмами обработки запросов и не поддерживают большие объемы данных между узлами, поэтому запросы выполняются быстрее в обеих системах обработки больших данных, таких как Presto, Hive, Spark, Kudu. и Паркет.

Чтобы сделать столбцовое сжатие (ресурсов) более эффективным, а индексы (запросы) более агрессивными, Druid и Pinot не поддерживают точечные обновления и удаления. Druid и Pinot поддерживают потоковую передачу в стиле Lambda и пакетный прием данных из Kafka. Эти две системы являются крупномасштабными, поскольку Druid Metamarkets использует кластер Druid, состоящий примерно из десяти тысяч ядер ЦП, а один кластер Pinot имеет тысячи машин.

Это подводит нас к следующему разделу —

Сравнение Apache Druid и Apache Pinot

Хотя Druid и Pinot имеют схожие архитектуры, все же есть некоторые важные функции, которые доступны в одном и отсутствуют в другом. Но эти функции могут быть добавлены в другую систему с некоторыми дополнительными усилиями. Тем не менее, есть одно функциональное различие между этими двумя, которое слишком велико, чтобы его можно было убрать — реализация управления сегментами в узлах «Координатор» в Друиде и «Контроллер» в узлах Пино.

«Но почему эта разница так велика, чтобы ее можно было устранить?» — спросите вы.

Итак, давайте поможем вам понять.

Управление сегментами в Druid

«Координатор» в Druid и «Контроллер» в Pinot не несут ответственности за сохранение метаданных в сегментах данных кластера и текущее сопоставление узлов обработки запросов и сегментов, на которые загружаются сегменты. Эта информация сохраняется в ZooKeeper.

В отличие от Pinot, Druid дополнительно сохраняет эту информацию в базе данных SQL, которая предоставляется для установки кластера Druid. Некоторые из преимуществ, которые он предлагает:

  • Меньше данных, хранящихся в ZooKeeper: данные в ZooKeeper состоят из минимальной информации о сопоставлении идентификатора сегмента со списком узлов обработки запросов, на которые загружается сегмент. Остальные данные, такие как список метрик данных, измерений и размера сегмента, хранятся в базе данных SQL.
  • Извлечение старых данных. После удаления старых сегментов данных из кластера метаданные о них удаляются из ZooKeeper, а остальные сегменты данных выгружаются из узлов обработки запросов. Но эти старые сегменты данных не удаляются из глубокого хранилища и баз данных SQL, что позволяет легко извлекать данные, если они потребуются для составления отчетов.

Управление сегментами в Pinot

В отличие от Druid, который сам реализует всю логику управления сегментами и взаимодействует с Zookeeper через Apache Curator, Pinot представляет большую долю логики управления кластерами и сегментами в Helix framework. Использование Helix помогает разработчикам Pinot сосредоточиться на других частях системы. При тестировании в разных условиях Helix может иметь меньше ошибок, чем логическая реализация Druid. Но Helix также может ограничивать Пино рамками своих рамок.

Теперь, когда мы рассмотрели часть управления сегментами Druid и Pinot, пришло время проверить разницу в функциях между ними, которые могут быть воспроизведены Java-разработчиками (поскольку Druid и Pinot написаны на Java), если это необходимо.

Подключаемый друид и самоуверенный пино

Поскольку Druid разрабатывался и использовался многими организациями, он получил поддержку множества взаимозаменяемых опций для каждой выделенной услуги или детали. Druid использует Kafka, RabbitMQ, Flink, Samza, Storm, Spark и т. д. в качестве источника для приема данных в режиме реального времени; HDFS, Google Cloud Storage, Amazon S3 и т. д. в качестве глубокого хранилища; и сам Kafka, Graphite или Druid по мере снижения показателей кластера Druid.

Поскольку Pinot был создан LinkedIn исключительно для удовлетворения его требований, он не предлагает особого выбора. В Pinot вы можете использовать Kafka только для приема данных в реальном времени; а Amazon S3 или HDFS — глубокое хранилище.

Выталкивание предиката Пино

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

Однако в Druid источники данных разделены по времени, и каждый метод приема данных должен иметь блокировку записи в определенном временном диапазоне при загрузке данных. Таким образом, никакие два метода не могут работать в одном и том же временном диапазоне одного и того же хранилища данных одновременно. Следовательно, в настоящее время в Druid нет предиката для брокеров.

Улучшенный формат данных и выполнение запросов Pinot

В Pinot инвертированный индекс необязателен, но в Druid он обязателен, хотя иногда он не нужен и занимает много места. В Pinot записываются минимальные и максимальные значения в числовых столбцах для каждого сегмента, а поддержка сортировки данных невероятна. Однако в Druid сортировка данных может выполняться только вручную. Улучшенная сортировка данных в Pinot соответствует лучшему сжатию, что приводит к меньшему потреблению места и повышает производительность запросов.

Умный алгоритм назначения сегментов Druid

В то время как алгоритм Пино заключается в назначении сегментов узлам обработки запросов с наименее загруженными сегментами в данный момент времени. Алгоритм, который использует Друид, гораздо более мирской. Druid учитывает таблицу и время каждого сегмента, создает сложную формулу для расчета окончательной оценки, в соответствии с которой ранжируются узлы обработки запросов, и выбирает лучший узел для назначения нового сегмента. Это принесло ок. Повышение скорости обработки запросов на продакшене на 30-40%.

Вынос

Это было все для сравнения Apache Druid и Apache Pinot. У обоих есть свои плюсы и минусы, некоторые из которых можно преодолеть с помощью разработчиков. Тем не менее, прежде чем выбрать какой-либо из двух, важно подумать, какой из них может помочь вашему варианту использования лучше, чем другой. И если вы хотите внедрить любой из них в свой бизнес, то вам следует нанять разработчиков с соответствующим опытом в этой области.