JDBC Коннектор
Этот коннектор следует использовать только в том случае, если ваши данные просты и состоят из примитивных типов данных, например, int. Специфические для ClickHouse типы, такие как карты, не поддерживаются.
В наших примерах мы используем Confluent-распределение Kafka Connect.
Ниже мы описываем простую установку, извлекая сообщения из одной темы Kafka и вставляя строки в таблицу ClickHouse. Мы рекомендуем Confluent Cloud, который предлагает щедрый бесплатный уровень для тех, у кого нет окружения Kafka.
Обратите внимание, что для JDBC Коннектора требуется схема (вы не можете использовать простой JSON или CSV с JDBC коннектором). Хотя схема может быть закодирована в каждом сообщении; настойчиво рекомендуется использовать реестр схем Confluenty, чтобы избежать связанных накладных расходов. Предоставляемый скрипт вставки автоматически выводит схему из сообщений и добавляет ее в реестр - этот скрипт можно повторно использовать для других наборов данных. Ключи Kafka предполагаются строками. Дополнительные сведения о схемах Kafka можно найти здесь.
Лицензия
JDBC Коннектор распространяется по условиям Confluent Community License
Шаги
Соберите ваши данные для подключения
Чтобы подключиться к ClickHouse с помощью HTTP(S), вам нужна следующая информация:
-
ХОСТ и ПОРТ: обычно порт 8443 при использовании TLS или 8123 при его отсутствии.
-
НАЗВАНИЕ БАЗЫ ДАННЫХ: по умолчанию есть база данных с именем
default
, используйте имя базы данных, к которой вы хотите подключиться. -
ИМЯ ПОЛЬЗОВАТЕЛЯ и ПАРОЛЬ: по умолчанию имя пользователя
default
. Используйте имя пользователя, подходящее для вашего случая использования.
Данные для вашей службы ClickHouse Cloud доступны в консоли ClickHouse Cloud. Выберите службу, к которой вы будете подключаться, и нажмите Подключиться:

Выберите HTTPS, и детали будут доступны в примере команды curl
.

Если вы используете self-managed ClickHouse, детали подключения задаются вашим администратором ClickHouse.
1. Установите Kafka Connect и Коннектор
Мы предполагаем, что вы загрузили пакет Confluent и установили его локально. Следуйте инструкциям по установке коннектора, как описано здесь.
Если вы используете метод установки confluent-hub, ваши локальные конфигурационные файлы будут обновлены.
Для отправки данных в ClickHouse из Kafka мы используем компонент Sink коннектора.
2. Загрузите и установите JDBC Драйвер
Загрузите и установите JDBC драйвер ClickHouse clickhouse-jdbc-<version>-shaded.jar
отсюда. Установите его в Kafka Connect, следуя подробностям здесь. Другие драйверы могут работать, но не были протестированы.
Общая проблема: документация предлагает скопировать jar в share/java/kafka-connect-jdbc/
. Если у вас возникли проблемы с тем, чтобы Connect находил драйвер, скопируйте драйвер в share/confluent-hub-components/confluentinc-kafka-connect-jdbc/lib/
. Или измените plugin.path
, чтобы включить драйвер - см. ниже.
3. Подготовьте Конфигурацию
Следуйте этим инструкциям для настройки Connect в соответствии с типом вашей установки, отмечая различия между отдельным и распределенным кластером. Если вы используете Confluent Cloud, распределенная настройка является актуальной.
Следующие параметры относятся к использованию JDBC коннектора с ClickHouse. Полный список параметров можно найти здесь:
_connection.url_
- это должно принимать формуjdbc:clickhouse://<clickhouse host>:<clickhouse http port>/<target database>
connection.user
- пользователь с правами записи в целевую базу данныхtable.name.format
- таблица ClickHouse для вставки данных. Она должна существовать.batch.size
- количество строк, отправляемых в одной партии. Убедитесь, что это значение установлено на соответствующее большое число. В соответствии с рекомендациями ClickHouse минимальное значение должно быть 1000.tasks.max
- JDBC Sink коннектор поддерживает выполнение одной или нескольких задач. Это может быть использовано для увеличения производительности. Вместе с размером партии это представляется вашим основным средством для улучшения производительности.value.converter.schemas.enable
- Установите в false, если используете реестр схем, true, если вы встраиваете свои схемы в сообщения.value.converter
- Установите в соответствии с вашим типом данных, например для JSON,io.confluent.connect.json.JsonSchemaConverter
.key.converter
- Установите наorg.apache.kafka.connect.storage.StringConverter
. Мы используем строковые ключи.pk.mode
- Не актуально для ClickHouse. Установите в none.auto.create
- Не поддерживается и должно быть false.auto.evolve
- Мы рекомендуем false для этой настройки, хотя она может быть поддержана в будущем.insert.mode
- Установите на "insert". Другие режимы в настоящее время не поддерживаются.key.converter
- Установите в соответствии с типами ваших ключей.value.converter
- Установите на основе типа данных в вашей теме. Эти данные должны иметь поддерживаемую схему - в форматах JSON, Avro или Protobuf.
Если вы используете наш образец данных для тестирования, убедитесь, что следующие параметры установлены:
value.converter.schemas.enable
- Установите в false, так как мы используем реестр схем. Установите в true, если вы встраиваете схему в каждое сообщение.key.converter
- Установите на "org.apache.kafka.connect.storage.StringConverter". Мы используем строковые ключи.value.converter
- Установите на "io.confluent.connect.json.JsonSchemaConverter".value.converter.schema.registry.url
- Установите на URL сервера схемы вместе с учетными данными для сервера схемы через параметрvalue.converter.schema.registry.basic.auth.user.info
.
Пример конфигурационных файлов для образца данных Github можно найти здесь, при условии, что Connect запускается в автономном режиме, а Kafka размещен в Confluent Cloud.
4. Создайте таблицу ClickHouse
Убедитесь, что таблица была создана, удалив ее, если она уже существует из предыдущих примеров. Пример, совместимый с уменьшенным набором данных Github, показан ниже. Обратите внимание на отсутствие любых типов Array или Map, которые в настоящее время не поддерживаются:
5. Запустите Kafka Connect
Запустите Kafka Connect в режиме автономной или распределенной работы.
6. Добавьте данные в Kafka
Вставьте сообщения в Kafka, используя скрипт и конфигурацию, предоставленные. Вам нужно будет изменить github.config, чтобы включить ваши учетные данные Kafka. Скрипт в настоящее время настроен для использования с Confluent Cloud.
Этот скрипт можно использовать для вставки любого ndjson файла в тему Kafka. Это попытается автоматически вывести схему для вас. Образец конфигурации, предоставленный, будет вставлять только 10k сообщений - измените здесь, если это необходимо. Эта конфигурация также удаляет любые несовместимые полевые массивы из набора данных во время вставки в Kafka.
Это необходимо для того, чтобы JDBC коннектор мог преобразовывать сообщения в операторы INSERT. Если вы используете свои данные, убедитесь, что вы вставляете схему с каждым сообщением (установив _value.converter.schemas.enable _в true) или обеспечиваете, чтобы ваш клиент публиковал сообщения с ссылкой на схему в реестр.
Kafka Connect должен начать получать сообщения и вставлять строки в ClickHouse. Обратите внимание, что предупреждения относительно "[JDBC Compliant Mode] Transaction is not supported." ожидаемы и могут быть проигнорированы.
Простое чтение из целевой таблицы "Github" должно подтвердить вставку данных.
Рекомендуемое дальнейшее чтение
- Параметры конфигурации Kafka Sink
- Глубокое погружение в Kafka Connect – Коннектор JDBC Source
- Глубокое погружение в Kafka Connect JDBC Sink: Работа с первичными ключами
- Kafka Connect в действии: JDBC Sink - для тех, кто предпочитает смотреть, а не читать.
- Глубокое погружение в Kafka Connect – Конвертеры и сериализация объяснены