Skip to content
Learning Platform
Beginner
20 minutes
Debezium Kafka Connect Architecture

Prerequisites:

  • module-1/01-cdc-fundamentals

Архитектура Debezium

В предыдущем уроке мы узнали, что log-based CDC читает журнал транзакций базы данных. Но как это реализуется на практике? Debezium — это платформа с открытым исходным кодом, которая делает CDC доступным и надежным.

Что такое Debezium?

Debezium — это распределенная платформа для Change Data Capture, построенная на Apache Kafka Connect. Она предоставляет коннекторы для популярных СУБД:

  • PostgreSQL (pgoutput plugin)
  • MySQL / MariaDB (binlog)
  • MongoDB (oplog)
  • SQL Server (CDC feature)
  • Oracle (LogMiner)
  • Db2, Cassandra, Vitess и другие

Ключевое преимущество Debezium — единый формат событий независимо от исходной СУБД. Потребители получают одинаковую структуру данных, будь то PostgreSQL или MongoDB.

Три режима развертывания

Debezium можно развернуть тремя способами, каждый из которых подходит для разных сценариев.

Kafka ConnectRecommended
PostgreSQL
WAL
Debezium Connector
CDC Events
KC Cluster
Kafka
Debezium Server
PostgreSQL
WAL
Debezium Server
CDC Events
Cloud Sink
Pub/Sub, Kinesis, Event Hubs
Embedded Engine
PostgreSQL
WAL
Java Application
(embedded Debezium)
CDC Events
Any Target

1. Kafka Connect (рекомендуемый)

Когда использовать: В большинстве случаев. Особенно если в вашем стеке уже есть Kafka.

Debezium работает как коннектор внутри Kafka Connect — фреймворка для интеграции с Kafka. Kafka Connect берет на себя:

  • Масштабирование (добавляйте workers)
  • Отказоустойчивость (автоматический failover)
  • Управление offsets (где остановились при чтении WAL)
  • REST API для управления коннекторами
{
  "name": "postgres-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "database.hostname": "postgres",
    "database.port": "5432",
    "database.user": "postgres",
    "database.password": "postgres",
    "database.dbname": "inventory",
    "topic.prefix": "inventory",
    "plugin.name": "pgoutput"
  }
}

2. Debezium Server

Когда использовать: Когда в стеке нет Kafka, а события нужно отправлять в облачные сервисы.

Debezium Server — это standalone приложение, которое читает WAL и отправляет события напрямую в:

  • Google Cloud Pub/Sub
  • Amazon Kinesis
  • Azure Event Hubs
  • Apache Pulsar
  • Redis Streams
  • HTTP webhook

Конфигурация через application.properties:

debezium.source.connector.class=io.debezium.connector.postgresql.PostgresConnector
debezium.source.database.hostname=postgres
debezium.source.database.port=5432
debezium.source.database.user=postgres
debezium.source.database.password=postgres
debezium.source.database.dbname=inventory

# Отправка в Pub/Sub
debezium.sink.type=pubsub
debezium.sink.pubsub.project.id=my-project

3. Embedded Engine

Когда использовать: Когда нужен максимальный контроль или минимальная задержка.

Debezium можно встроить как библиотеку в ваше Java-приложение:

// Embedded Debezium в Java приложении
try (DebeziumEngine<ChangeEvent<String, String>> engine =
        DebeziumEngine.create(Json.class)
            .using(props)
            .notifying(record -> {
                // Ваша логика обработки события
                System.out.println(record.value());
            })
            .build()) {

    executor.execute(engine);
}

Преимущества: нет внешних зависимостей, минимальная latency, полный контроль над обработкой.

Недостатки: вы сами отвечаете за offset management, масштабирование, отказоустойчивость.

Проверка знаний
Компания использует Google Cloud Pub/Sub для обмена сообщениями и не планирует внедрять Apache Kafka. Какой режим развертывания Debezium подходит для отправки CDC-событий напрямую в Pub/Sub?
Ответ
Debezium Server -- standalone приложение, которое читает WAL и отправляет события напрямую в облачные сервисы, включая Google Cloud Pub/Sub, Amazon Kinesis и Azure Event Hubs. Этот режим не требует Kafka в инфраструктуре, что делает его идеальным выбором для cloud-native архитектур без Kafka.

Архитектура Kafka Connect

Поскольку Kafka Connect — рекомендуемый режим, разберем его детальнее.

REST API :8083
Управление
CLUSTER
Worker 1
Worker 2
Worker 3
↔ Координация между workers
INTERNAL TOPICS
connect-configs
connect-offsets
connect-status
Публикация
Data Topics

Компоненты Kafka Connect

Workers — JVM процессы, которые выполняют коннекторы. В distributed mode workers образуют кластер и распределяют нагрузку.

Connectors — конфигурация задачи (какую БД читать, какие таблицы). Один коннектор может порождать несколько tasks.

Tasks — единицы работы. Например, один task на каждую таблицу. Tasks распределяются между workers.

Internal Topics:

  • connect-configs — конфигурации коннекторов
  • connect-offsets — позиции чтения (где остановились в WAL)
  • connect-status — статусы коннекторов и tasks

REST API для управления

Kafka Connect предоставляет REST API на порту 8083:

# Список коннекторов
curl http://localhost:8083/connectors

# Создать коннектор
curl -X POST http://localhost:8083/connectors \
  -H "Content-Type: application/json" \
  -d @connector-config.json

# Статус коннектора
curl http://localhost:8083/connectors/postgres-connector/status

# Перезапустить task
curl -X POST http://localhost:8083/connectors/postgres-connector/tasks/0/restart

# Удалить коннектор
curl -X DELETE http://localhost:8083/connectors/postgres-connector
Проверка знаний
Какую информацию хранит внутренний топик connect-offsets в Kafka Connect и почему он критически важен для работы Debezium?
Ответ
Топик connect-offsets хранит позиции чтения WAL (оффсеты) для каждого коннектора. Без этих данных после перезапуска Debezium не знал бы, откуда продолжить чтение журнала транзакций, что привело бы к повторной обработке уже отправленных событий или пропуску новых изменений.

Поток CDC событий

Полный путь события от изменения в БД до потребителя:

Logical Replication Protocol: PostgreSQL встроенный механизм для чтения WAL

App
PostgreSQL
WAL
Debezium
KC
Kafka
Consumer
UPDATEWrite to WALOKReplication slotpgoutputCDC formatPublish to topicACKSave offsetpoll()CDC Event

Ключевые моменты

  1. Replication Slot — PostgreSQL резервирует WAL сегменты, пока Debezium их не прочитает. Гарантия: ни одно изменение не будет потеряно.

  2. pgoutput — встроенный плагин PostgreSQL (с версии 10). Не требует установки дополнительного ПО.

  3. Offset Storage — Kafka Connect сохраняет позицию чтения. При перезапуске Debezium продолжит с того же места.

  4. Topic Naming — по умолчанию: {topic.prefix}.{schema}.{table}. Например: inventory.public.customers.

Версии в нашем курсе

В лабораторном окружении курса используются:

КомпонентВерсияПочему
Debezium2.5.4Стабильная версия, совместимость с ARM64
Kafka7.8.1 (Confluent)KRaft mode (без ZooKeeper), production-ready
PostgreSQL15+Встроенный pgoutput, логическая репликация
Pythonconfluent-kafkaНативная производительность через librdkafka

Примечание: Debezium 3.x пока не используется из-за проблем с Java 21 на ARM64 (Apple Silicon). Версия 2.5.x полностью стабильна и поддерживает все необходимые функции.

Выбор режима развертывания

КритерийKafka ConnectServerEmbedded
Kafka в стекеЕстьНетЛюбой
МасштабируемостьАвтоматическаяРучнаяРучная
ОтказоустойчивостьВстроеннаяБазоваяСвоя
СложностьНизкаяНизкаяВысокая
LatencyМсМсМикросекунды
Use case90% случаевCloud-nativeСпециализированный

Что дальше?

Теперь, когда вы понимаете архитектуру, пора запустить CDC на практике. В следующем уроке мы развернем лабораторное окружение с Docker Compose и создадим первый коннектор.

Вы научитесь:

  • Запускать Kafka, PostgreSQL и Debezium Connect
  • Создавать коннектор через REST API
  • Наблюдать CDC события в Kafka

Ключевые выводы

  1. Debezium — это платформа CDC с коннекторами для всех популярных СУБД
  2. Kafka Connect — рекомендуемый режим развертывания (масштабируемость, отказоустойчивость, простота)
  3. Debezium Server — для сценариев без Kafka (отправка в cloud сервисы)
  4. Embedded Engine — для максимального контроля в Java-приложениях
  5. pgoutput — встроенный плагин PostgreSQL, не требует установки
  6. REST API — управление коннекторами через HTTP запросы

Check Your Understanding

Score: 0 of 0
Conceptual
Question 1 of 4. Какой режим развертывания Debezium рекомендуется для большинства production-сценариев и почему?

Finished the lesson?

Mark it as complete to track your progress