Почему вы должны использовать индексирование Kafka вместо Tranquility

Хранение данных в потоках данных в реальном времени всегда было проблемой. Решение зависит от ваших вариантов использования. Если вы хотите хранить данные для ежедневной или ежемесячной аналитики, вы можете использовать распределенную файловую систему и запускать Hive или Presto поверх нее. Если вы собираетесь запустить простую аналитику в реальном времени, вы можете сохранить последние данные в Elasticsearch и запустить Kibana для диаграмм.

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

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

Спокойствие

Tranquility - это пакет, предоставляемый Apache Druid для приема данных в реальном времени. Tranquility - это не совсем то, что эквивалентно драйверам JDBC или Cassandra. Он выполняет за вас секционирование, репликацию, обнаружение служб и смену схемы. Пользователь должен заботиться о данных и источнике данных, которые ему нужно использовать.

Tranquility решает множество проблем, с которыми может столкнуться пользователь. Тем не менее, это связано со своим набором проблем.

Не ровно-один раз

В некоторых случаях Tranquility может создавать повторяющиеся записи. Он не дает гарантии только один раз. В случае таких сценариев, как тайм-ауты в запросе POST для данных или отсутствие подтверждения, Tranquility может создавать повторяющиеся записи.

В этой ситуации ответственность за дедупликацию данных возлагается на пользователя. Это может даже привести к неправильным графикам в надмножестве Apache, если вы его используете.

Падение данных

Самая серьезная проблема с Tranquility - потеря данных. Существуют различные обстоятельства, при которых Tranquility намеренно или из-за ошибки не может вставить данные. Некоторые из этих случаев, перечисленных в официальной документации:

  • События с отметками времени за пределами настроенного windowPeriod будут отброшены.
  • Если у вас будет больше отказов менеджеров среднего звена Druid, чем количество настроенных реплик, некоторые частично проиндексированные данные могут быть потеряны.
  • Если существует постоянная проблема, препятствующая обмену данными со службой индексирования Druid, и политики повторных попыток исчерпаны в течение этого периода или период длится дольше, чем ваш windowPeriod, некоторые события будут сброшены.
  • Если есть проблема, которая не позволяет Tranquility получить подтверждение от службы индексирования, он повторит пакетную обработку, что может привести к дублированию событий.

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

Обработка ошибок

Поскольку демон Tranquility работает внутри вашей JVM, приложение несет ответственность за обработку таких ошибок, как тайм-ауты. В случае таких приложений, как Apache Flink, неэффективное управление одной из этих ошибок может привести к нежелательным перезапускам.

Помимо всех этих проблем, Tranquility построен для друида 0.9.2. Использование его с текущей версией druid 0.16.0 может создать неопознанные проблемы.

Индексатор Kafka

Для решения всех вышеперечисленных проблем Apache druid добавил индексатор Kafka в версии 0.9.1. Индексатор оставался в экспериментальном состоянии до версии 0.14.

Служба индексирования Kafka сначала запускает супервизор в соответствии с указанной вами конфигурацией. Затем супервизор периодически запускает новые задачи индексации, которые отвечают за потребление данных из Kafka и их публикацию в Druid.

В отличие от Tranquility, задачи индексирования Kafka могут быть длительными. После минимального номера можно опубликовать несколько сегментов. строк или байтов достигнуто без запуска новой задачи.

Kafka Indexer стремится решать различные проблемы, с которыми сталкивались его предшественники.

Семантика ровно один раз

Индексатор Kafka предоставляет пользователю единовременную гарантию. Эта гарантия возможна, так как потребитель Kafka по умолчанию, поскольку Kafka 0.11.x обеспечивает готовую поддержку этой семантики.

Опубликовать отложенные данные

Индексатор Kafka предназначен для публикации отложенных данных. Он не подлежит рассмотрению windowPeriod в Tranquility. Эта возможность дает пользователю свободу засыпать данные из определенного смещения в Kafka в Druid.

Обновления схемы

Хотя Tranquility также поддерживает обновления схемы, это намного проще сделать в Kafka Indexer. Вам просто нужно отправить запрос POST, содержащий новую схему, и супервизор создаст новые задачи с обновленной схемой. Со стороны производителя никаких изменений не требуется.
Если вы добавляете новые столбцы, в более старых строках будут отображаться пустые значения в этих столбцах, но строки по-прежнему будут доступны для запросов.

Сервисы Kafka Indexer решили множество проблем, с которыми сталкивались разработчики при использовании Tranquility. Если вы хотите начать работу со службой индексирования Kafka, вы можете обратиться к Apache Kafka Ingestion в официальной документации Druid.