Skip to content
EN

Что такое CDC (Change Data Capture)

Коротко:

CDC (Change Data Capture) — pattern streaming database changes в real-time в downstream systems. Вместо периодически SELECT всей таблицы, читается transaction log (Postgres WAL, MySQL binlog). Tools: Debezium (most popular, Kafka Connect based), AWS DMS, Maxwell, Airbyte. Use cases: sync DB → search index (Elasticsearch), DB → cache (Redis), DB → data warehouse (Snowflake), event-driven arch.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Log-based: read binlog/WAL (low overhead, zero SQL load)
  • Trigger-based: trigger on INSERT/UPDATE → write to outbox table (higher overhead)
  • Timestamp-based: polling column updated_at (miss deletes)
  • Debezium: Java-based, supports Postgres/MySQL/Mongo/Oracle/SQL Server
  • Typical output: Kafka topic per table с JSON events

Пример

# Debezium Kafka Connect config для Postgres
{
  "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
  "database.hostname": "pg.internal",
  "database.dbname": "mydb",
  "slot.name": "debezium_slot",
  "publication.name": "debezium_pub",
  "topic.prefix": "mydb"
}
# Output: Kafka topics mydb.public.users, mydb.public.orders, ...

Смежные термины

Что такое Change Data Capture (CDC)?

Change Data Capture (CDC) — это метод отслеживания изменений в данных, позволяющий системам интеграции и аналитики получать обновления в реальном времени без необходимости полного сканирования баз данных. Он используется для минимизации нагрузки на систему и улучшения производительности при работе с большими объемами данных.

Как работает CDC?

Основной принцип работы CDC заключается в мониторинге изменений в базе данных, таких как вставка, обновление и удаление записей. Обычно это достигается с помощью триггеров или журналов транзакций. Например, при использовании PostgreSQL можно включить логирование изменений, чтобы отслеживать все действия, происходящие с данными.

Пример настройки CDC в PostgreSQL:

CREATE TABLE employee (id SERIAL PRIMARY KEY, name VARCHAR(100), position VARCHAR(100));

После этого можно создать триггер, который будет записывать изменения в отдельную таблицу:

CREATE OR REPLACE FUNCTION log_employee_changes() RETURNS TRIGGER AS $$ BEGIN INSERT INTO employee_log (employee_id, old_name, new_name, change_time) VALUES (OLD.id, OLD.name, NEW.name, NOW()); RETURN NEW; END; $$ LANGUAGE plpgsql;

И затем применить триггер:

CREATE TRIGGER employee_changes AFTER UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION log_employee_changes();

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

Преимущества и недостатки CDC

CDC обладает множеством преимуществ, включая:

  • Минимизация нагрузки: позволяет избежать полного сканирования базы данных, что снижает нагрузку на систему.
  • Скорость обработки: изменения могут быть обработаны в реальном времени, что важно для приложений, требующих актуальных данных.
  • Гибкость: поддерживает различные источники данных и может быть интегрирован с различными системами.

Однако есть и недостатки:

  • Сложность настройки: требует дополнительных усилий для настройки и поддержки, особенно в больших системах.
  • Проблемы с консистентностью: могут возникать проблемы с согласованностью данных, если не уделить должного внимания обработке транзакций.
  • Зависимость от инфраструктуры: эффективность CDC может зависеть от используемой базы данных и ее конфигурации.

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

Больше по теме

Часто задаваемые вопросы

CDC vs Event Sourcing?

CDC — capture из existing DB (transparent for apps). ES — DB itself является event log (app writes events). Дополняющие, не synonyms.

Debezium production-ready?

Да, Red Hat backing. Netflix, Wepay, Shopify в production. Основной gotcha — schema changes require careful handling.

Alternative — polling?

Проще setup, но miss deletes, high DB load, latency. Debezium log-based — no SELECT на source.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.