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

Интеграция 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, который интегрирует 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 и из него. Source Connectors вставляют данные в темы Kafka из других систем, в то время как Sink Connectors передают данные из тем Kafka в другие хранилища данных, такие как ClickHouse.
  • Vector - Vector — это независимый от поставщика конвейер данных. С возможностью чтения из Kafka и отправки событий в ClickHouse, это представляет собой надежный вариант интеграции.
  • JDBC Connect Sink - Коннектор Kafka Connect JDBC Sink позволяет экспортировать данные из тем Kafka в любую реляционную базу данных с JDBC-драйвером.
  • Пользовательский код - Пользовательский код с использованием соответствующих клиентских библиотек для Kafka и ClickHouse может быть уместен в тех случаях, когда требуется индивидуальная обработка событий. Это выходит за рамки данной документации.
  • Kafka table engine обеспечивает нативную интеграцию ClickHouse (не доступна в ClickHouse Cloud). Этот движок таблиц извлекает данные из исходной системы. Это требует, чтобы ClickHouse имел прямой доступ к Kafka.
  • Kafka table engine с именованными коллекциями - Использование именованных коллекций обеспечивает нативную интеграцию 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.