Обзор Debezium
Возможности Debezium
Debezium — это распределенная платформа с открытым исходным кодом, работа которой основана на паттерне захвата изменения данных (Change Data Capture, CDC).
Коннектор Debezium собирает изменения в базах данных и передает их во внешние приложения.
Debezium используется внешними приложениями для учета и обработки изменения данных в СУБД: события вставки, обновления и удаления.
Ниже на рисунке показаны возможности платформы Debezium.
Коннекторы Debezium могут быть запущены при помощи следующих способов:
-
Через Kafka Connect с использованием готовых плагинов Debezium для создания коннекторов. При этом все изменения записываются в топики Kafka. Такой способ рекомендуется, если в системе используется потоковая передача событий в/из Kafka, чтобы исключить сторонних посредников.
-
С использованием Debezium-сервера — готового приложения, которое передает события изменений из исходной базы данных в различные инфраструктуры обмена сообщениями.
-
С использованием Debezium-движка, позволяющего встраивать коннекторы Debezium непосредственно в пространство приложения с использованием специального модуля debezium-api. При этом отсутствует такой уровень отказоустойчивости и надежности, как при использовании сервиса Kafka Connect, но в то же время отсутствуют такие посредники, как брокеры Kafka и сервис Kafka Connect.
Debezium и Kafka Connect
Ниже на рисунке показано, как выглядит архитектура конвейера сбора событий изменения при участии коннектора Debezium, например, при передаче событий из сервера PostgreSQL в любую базу данных, которая поддерживает JBDC.
Коннектор Debezium, созданный при помощи Kafka Connect, записывает события изменений из PostgreSQL в топик Kafka, имя которого по умолчанию состоит из префикса, заданного пользователем, имени схемы базы данных и имени таблицы, из которой собираются изменения. После того, как записи о событиях изменений сохраняются в Kafka, различные sink-коннекторы, созданные Kafka Connect, могут передавать записи в другие базы и хранилища данных.
Debezium предоставляет набор коннекторов для передачи данных в топики Kafka из различных СУБД.
Особенности коннекторов Debezium для разных СУБД
Ниже описаны особенности работы коннекторов, доступных по умолчанию в ADS Control.
PostgreSQL
Захват изменения данных на сервере PostgreSQL обеспечивается при помощи механизма логической репликации на основе журнала упреждающей записи (Write Ahead Log, WAL). Этот лог хранится на диске, и в нем сохраняются все события изменения данных для запросов INSERT
, UPDATE
и DELETE
. Эти изменения обрабатываются при помощи плагина вывода:
-
decoderbufs — плагин, основанный на Protobuf;
-
pgoutput — стандартный плагин вывода логического декодирования в PostgreSQL 10+, используется самим PostgreSQL для логической репликации.
Работа коннектора Debezium для PostgreSQL имеет ограничения, в том числе, связанные с используемой функцией логического декодирования PostgreSQL:
-
Не поддерживаются изменения DDL — события, связанные с запросами
CREATE
,ALTER
,DROP
,TRUNCATE
. -
Если PostgreSQL организован в виде кластера, коннектор может работать только с основным сервером; и, если он выходит из строя, коннектор останавливается. После восстановления основного сервера можно перезапустить коннектор. Если другой сервер PostgreSQL был повышен до основного, необходимо вручную настроить конфигурацию коннектора перед перезапуском.
-
Модуль вывода логического декодирования
pgoutput
не фиксирует значения для сгенерированных столбцов. -
В настоящее время Debezium поддерживает базы данных только с кодировкой символов UTF-8. При однобайтовой кодировке символов невозможно правильно обрабатывать строки, содержащие символы расширенного кода ASCII.
Когда коннектор PostgreSQL впервые подключается к базе данных PostgreSQL, он создает согласованный моментальный снимок (снепшот) каждой из схем базы данных. Далее коннектор выполняет потоковую передачу изменений с того места, где был создан моментальный снимок.
Параметры потоковой репликации сервера PostgreSQL, важные для работы коннектора:
-
wal_level
— для включения поддержки логического декодирования необходимо установить в значениеlogical
; -
параметры, влияющие на количество коннекторов, которые могут одновременно обращаться к серверу:
-
max_replication_slots
— максимальное количество слотов репликации, которое может поддерживать сервер. -
max_wal_senders
— максимальное количество одновременных подключений от резервных серверов или клиентов потокового базового резервного копирования.
-
-
wal_keep_size
— максимальный размер WAL, который будет сохранять слот репликации.
Для настройки PostgreSQL Server для запуска коннектора Debezium при использовании плагина pgoutput
требуется пользователь базы данных, который имеет следующие привилегии:
-
REPLICATION
-
LOGIN
Дополнительно при использовании плагина pgoutput
пользователю требуются следующие привилегии:
-
CREATE
в базе данных для добавления публикаций. -
SELECT
в таблицах для копирования исходных данных таблицы.
MS SQL
Чтобы разрешить коннектору Debezium для SQL Server фиксировать записи событий изменений для операций базы данных, необходимо сначала включить функцию отслеживания измененных данных, доступную начиная с SQL Server 2016. CDC необходимо включить в базе данных и в каждой таблице, которая должна быть захвачена.
Коннектор отслеживает операции INSERT
, UPDATE
и DELETE
на уровне строк и записывает записи событий для каждой таблицы в отдельный топик Kafka.
При первом подключении коннектора к базе данных SQL Server он делает согласованный снимок схем (снепшот) для всех таблиц, указанных в его конфигурации, и передает его в Kafka. Далее коннектор непрерывно отслеживает происходящие изменения на уровне строк.
Запуск коннектора Debezium
Коннекторы Debezium, как и другие коннекторы, могут быть созданы при помощи нескольких способов через Kafka Connect.
На странице Kafka Connect пользовательского интерфейса ADS Control доступны к выбору плагины для создания некоторых коннекторов Debezium для передачи данных в топики Kafka кластера ADS, а также предоставляется возможность управлять работой коннекторов:
Остальные коннекторы могут быть установлены самостоятельно. Для этого необходимо создать JAR-файл, используя код коннектора, загруженный из репозитория Debezium, и сохранить его в папку, путь к которой указывается в качестве параметра plugin.path в группе connect-distributed.properties на странице конфигурирования сервиса Kafka Connect.