Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium

Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium

Что общего между Kafka Connect JDBC Source и PostgreSQL CDC Source V2 (Debezium), чем отличаются эти коннекторы и как добавить JDBC-драйвер для передачи данных из PostgreSQL в Apache Kafka на Docker.

Коннекторы Kafka к реляционным БД от Confluent

О том, что CDC-коннектор Debezium позволяет организовать интеграцию Apache Kafka с реляционной базой данных PostgreSQL, я уже писала здесь, и разбирала, как это работает, на практическом примере здесь. Коннектор, как постоянно работающий потребитель, в реальном времени отслеживает изменения в одной или нескольких таблицах БД, передавая их в топик Kafka. Так реализуется шаблон захвата измененных данных (CDC, Change Data Capture), позволяя выстраивать потоковые конвейеры синхронизации данных без пакетных обновлений и ресурсоемких полных сканирований.

Впорчем, CDC-коннектор Debezium не является единственным решением, которое позволяет интегрировать Kafka с PostgreSQL. Разработчик коммерческой экосистемы вокруг Kafka, компания Confluent, предлагает целых 2 коннектора, которые позволяют в реальном времени импортировать данные из реляционной БД в топик: Kafka Connect JDBC Source и PostgreSQL CDC Source V2 (Debezium). Оба коннектора извлекают данные из реляционной базы и передают их в Kafka в виде событий, интегрированы с Confluent Platform и имеют интерфейс для настройки и управления параметрами подключения и топиками.

Однако, они принципиально отличаются принципами работы:

  • метод извлечения данных. JDBC-коннектор использует SQL-запросы для извлечения данных, периодически опрашивая таблицы, чтобы получить изменения. Это может быть менее эффективно для больших объемов данных, т.к. требует выполнения полных запросов. CDC-коннектор Debezium читает WAL-журналы логической репликации для отслеживания изменений в реальном времени. Это более эффективно для обработки больших объемов данных, поскольку изменения обрабатываются в виде транзакций.
  • поддержка изменений схемы. Изменения в структуре таблиц могут требовать дополнительных настроек или перезапуска JDBC-коннектора. CDC-коннектор Debezium лучше справляется с изменениями схемы, поскольку Debezium сам отслеживает их в реальном времени и автоматически адаптируется.
  • сложность настройки. JDBC-коннектор настраивается намного проще и почти не требует изменений в конфигурации базы данных, что я и покажу в новой статье. CDC-коннектор Debezium требует настройку логической репликации на уровне базы данных и создания слота репликации, что я показывала здесь.

Таким образом, JDBC-коннектор подходит для случаев, когда объемы передаваемых в Kafka данных небольшие, нет жестких требований к обработке изменений в реальном времени, или когда источник, т.е. база данных, не поддерживает CDC. CDC-коннектор Debezium стоит выбирать, если нужно максимально сократить задержку передачи больших объемов данных в Kafka. Это решение подходит для высоконагруженных систем, где необходимо обрабатывать большие объемы данных и улавливать изменения в реальном времени.

Далее рассмотрим пример создания и настройки JDBC-коннектора к Apache Kafka, развернутой в Docker, на основании образа от Confluent. Пример конфигурационного YAML-файла docker-compose для набора сервисов в этом образе я приводила здесь.

Пример добавления JDBC-драйвера для коннектора и настройка YAML-файла docker-compose

Изначально в моем образе Kafka доступны только 3 коннектора, связанные с зеркальной репликацией (MirrorMaker). Это видно в GUI.

Изначально доступные типы коннекторов Kafka Connect
Изначально доступные типы коннекторов Kafka Connect

Чтобы добавить JDBC-коннектор, пришлось выполнить целый ряд действий:

  • скачать архив с файлами JDBC-коннектора Source and Sink с официального хаба Confluent;
  • внести изменения в конфигурационный YAML-файл docker-compose, добавив в раздел описания сервиса connect путь к драйверу в переменную CONNECT_PLUGIN_PATH и путь к папке с JAR-архивами коннектора;
  • пересобрать и перезапустить контейнер, чтобы Kafka Connect нашел драйвер и использовал его.

В итоге мой конфигурационный YAML-файл docker-compose стал выглядеть так:

Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium
Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium
Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium
Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium

В этом файле в раздел connect добавлена строка

Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium

Она нужна, чтобы смонтировать папку jars из текущей директории, где находится docker-compose.yml, внутрь контейнера по пути /etc/kafka-connect/jars. А переменная CONNECT_PLUGIN_PATH теперь также включает этот путь /etc/kafka-connect/jars, где будет находиться JDBC-драйвер.

Пересобрав контейнер с помощью инструкции

Битва коннекторов Kafka от Confluent: JDBC-коннектор vs CDC Debezium

можно увидеть успешную регистрацию драйвера в GUI.

Добавленные типы JDBC-коннекторов
Добавленные типы JDBC-коннекторов

После этого можно создавать и настраивать JDBC-коннектор к PostgreSQL, о чем расскажу завтра.

Узнайте больше про администрирование и эксплуатацию Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Статья:

Курсы:

Наш сайт:

Копирование, размножение, распространение, перепечатка (целиком или частично), или иное использование материала допускается только с письменного разрешения правообладателя ООО "УЦ Коммерсант"

Начать дискуссию