Перейти к основному содержимому
Перейти к основному содержимому

Интеграция Kafka с ClickHouse

Apache Kafka — это распределенная платформа потоковой передачи событий с открытым исходным кодом, используемая тысячами компаний для высокопроизводительных конвейеров данных, потоковой аналитики, интеграции данных и критически важных приложений. В большинстве случаев, связанных с Kafka и ClickHouse, пользователи будут желать вставлять данные, основанные на Kafka, в ClickHouse. Ниже мы описываем несколько вариантов для обоих случаев использования, выделяя преимущества и недостатки каждого подхода.

Выбор варианта

При интеграции Kafka с ClickHouse вам необходимо будет заранее принять архитектурные решения о высокоуровневом подходе, который будет использоваться. Мы описываем наиболее распространенные стратегии ниже:

ClickPipes для Kafka (ClickHouse Cloud)

  • ClickPipes предлагает самый простой и интуитивно понятный способ загрузки данных в ClickHouse Cloud. В настоящее время поддерживаются Apache Kafka, Confluent Cloud и Amazon MSK, и в ближайшее время появятся многие другие источники данных.

Облачная связь Kafka третьих сторон

  • Confluent Cloud - Платформа Confluent предоставляет возможность загрузки и работы с ClickHouse Connector Sink на Confluent Cloud или использования HTTP Sink Connector для Confluent Platform, который интегрирует Apache Kafka с API через HTTP или HTTPS.

  • Amazon MSK - Поддерживает Amazon MSK Connect для передачи данных из кластеров Apache Kafka в внешние системы, такие как ClickHouse. Вы можете установить ClickHouse Kafka Connect на Amazon MSK.

  • Redpanda Cloud - Redpanda — это совместимая с API Kafka потоковая платформа данных, которая может использоваться в качестве источника данных для ClickHouse. Облачная платформа Redpanda Cloud интегрируется с ClickHouse через протокол Kafka, позволяя осуществлять реальную загрузку данных для потоковых аналитических задач.

Самостоятельная связь с Kafka

  • Kafka Connect - Kafka Connect — это бесплатный, открытый компонент Apache Kafka, который работает как централизованный хаб для простой интеграции данных между Kafka и другими системами данных. Коннекторы обеспечивают простой способ масштабируемой и надежной передачи данных к и из Kafka. Коннекторы источников вставляют данные в темы Kafka из других систем, в то время как коннекторы приемников передают данные из тем Kafka в другие хранилища данных, такие как ClickHouse.
  • Vector - Vector — это нейтральный по отношению к поставщикам конвейер данных. С возможностью чтения из Kafka и отправки событий в ClickHouse это представляет собой надежный вариант интеграции.
  • JDBC Connect Sink - Коннектор Kafka Connect JDBC Sink позволяет экспортировать данные из тем Kafka в любую реляционную базу данных с JDBC-драйвером.
  • Пользовательский код - Пользовательский код с использованием соответствующих клиентских библиотек для Kafka и ClickHouse может быть уместен в случаях, когда требуется индивидуальная обработка событий. Это выходит за рамки данного документа.
  • Движок таблиц Kafka предоставляет нативную интеграцию ClickHouse (не доступно в ClickHouse Cloud). Этот движок таблиц извлекает данные из исходной системы. Это требует прямого доступа ClickHouse к Kafka.
  • Движок таблиц Kafka с именованными коллекциями - Использование именованных коллекций предоставляет нативную интеграцию ClickHouse с Kafka. Этот подход позволяет устанавливать безопасные соединения с несколькими кластерами Kafka, централизуя управление конфигурацией и улучшая масштабируемость и безопасность.

Выбор подхода

Вопрос сводится к нескольким пунктам принятия решений:

  • Связь - Движок таблиц Kafka должен уметь извлекать данные из Kafka, если ClickHouse является местом назначения. Это требует двунаправленной связи. Если существует сетевое разделение, например, ClickHouse находится в облаке, а Kafka управляется самостоятельно, вам может быть неуютно с удалением этого соединения по причинам соблюдения нормативных актов и безопасности. (Этот подход в настоящее время не поддерживается в ClickHouse Cloud.) Движок таблиц Kafka использует ресурсы внутри самого ClickHouse, использует потоки для потребителей. Возложение этого ресурса на ClickHouse может быть невозможно из-за ограничений по ресурсам, или ваши архитекторы могут предпочитать разделение функций. В этом случае такими инструментами, как Kafka Connect, которые работают как отдельный процесс и могут быть развернуты на другом оборудовании, может быть предпочтительней. Это позволяет процессу, ответственному за извлечение данных из Kafka, масштабироваться независимо от ClickHouse.

  • Хостинг в облаке - Облачные поставщики могут устанавливать ограничения на компоненты Kafka, доступные на их платформе. Ознакомьтесь с руководством, чтобы изучить рекомендуемые варианты для каждого облачного поставщика.

  • Внешнее обогащение - Хотя сообщения могут быть обработаны перед вставкой в ClickHouse с помощью функций в операторе select материализованного представления, пользователи могут предпочесть перемещение сложного обогащения за пределы ClickHouse.

  • Направление потока данных - Vector поддерживает только передачу данных из Kafka в ClickHouse.

Предположения

Пользовательские руководства, связанные выше, предполагают следующее:

  • Вы знакомы с основами Kafka, такими как производители, потребители и темы.
  • У вас есть подготовленная тема для этих примеров. Предполагаем, что все данные хранятся в Kafka в формате JSON, хотя принцип остается тем же при использовании Avro.
  • Мы используем отличный kcat (ранее kafkacat) в наших примерах для публикации и потребления данных Kafka.
  • Хотя мы ссылаемся на некоторые python скрипты для загрузки образцовых данных, не стесняйтесь адаптировать примеры к вашему набору данных.
  • Вы в целом знакомы с материализованными представлениями ClickHouse.