Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

CDC - Change Data Capture

Зачем

  • позволяет стримить информацию напрямую из таблиц на основе bin-log
  • метод записи и отслеживания изменений в базе данных
  • Обновление существующих сервисов
    • Если вы уже имеете существующие сервисы, но хотите обновить их, чтобы они могли использовать данные из других сервисов, то CDC может быть полезен. Вы можете захватывать изменения данных из других сервисов и реплицировать их в сервисы, которые нуждаются в этих данных.
  • Создание новых сервисов
    • При создании новых сервисов как часть распила монолита, CDC может быть использован для захвата и передачи данных из существующих баз данных монолита в новые сервисы. Это позволяет сохранить целостность данных и избежать дублирования информации.
  • Распределенная аналитика
    • Если вам необходимо проводить анализ данных, соответствующих различным сервисам, CDC может быть использован для захвата изменений из этих сервисов и передачи их в систему аналитики. Это позволяет получать актуальные данные для анализа без необходимости полного переноса данных.
  • Интеграция с внешними системами
    • Если ваш монолит должен интегрироваться с другими внешними системами, CDC может быть использован для захвата изменений в данных монолита и передачи их во внешние системы. Это обеспечивает актуальные данные для внешних систем и поддерживает синхронизацию информации.
  • Репликация данных
    • Если у вас есть несколько экземпляров сервисов или существуют географическое разделение данных, CDC может быть использован для репликации данных между этими экземплярами или местоположениями. Это помогает обеспечить консистентность данных и более высокую доступность.
  • CDC vs ETL

Плюсы и минусы

Плюсы:

  • Синхронизация данных: CDC системы позволяют в режиме реального времени отслеживать и реплицировать изменения данных из одной базы данных в другую. Это особенно полезно при поддержке резервных копий, разделении нагрузки или создании отчетов на основе актуальных данных.
  • Отслеживание истории изменений: CDC системы сохраняют историю всех изменений данных. Это позволяет аналитикам анализировать, какие данные были изменены, когда и кем. История изменений также может быть полезна для отладки или в случае возникновения проблем с данными.
  • Минимизация задержек: CDC системы основаны на идентификации и захвате только измененных данных, а не всей базы данных. Это уменьшает задержки и нагрузку на систему, поскольку обработка данных происходит только для измененных записей.
  • Легкость интеграции: CDC системы обычно предоставляют API или интерфейсы для интеграции с другими приложениями и системами. Это упрощает процесс интеграции данных с различными инструментами и платформами.
    • для хранения используется единая модель событий, поэтому конечному приложению не придётся беспокоиться о нюансах эксплуатации различных СУБД.
  • Безопасность и целостность данных: CDC системы обеспечивают механизмы проверки целостности данных и контроля доступа. Это помогает предотвращать несанкционированный доступ к данным и обеспечивает сохранность и консистентность данных.
  • Улучшение производительности: CDC системы позволяют аналитикам и разработчикам избежать сложностей и затрат, связанных с полной перезагрузкой или репликацией данных каждый раз, когда необходимо получить актуальные данные. Вместо этого они могут использовать только измененные данные для выполнения своих задач.
    • брокер сообщений простота горизонтального масштабирования приложений, отслеживающих изменения в данных. При этом влияние на источник данных сводится к минимуму, поскольку получение данных происходит не напрямую из СУБД, а из кластера Kafka.
    • стриминг изменениq данных на уровне строк с низкой задержкой, высокой надежностью и доступностью.

Минусы:

  • large amount of engineering effort and time is required to set up production CDC pipelines using Debezium. The availability of trained engineers to implement these pipelines is also another challenge.
  • требует настройки и управления инфраструктурой для захвата и передачи изменений данных.
  • Проблема с CDC - это отсутствие API
    • Большая часть вашей базы становится АПИ, со всеми требованиями к его стабильности и совершенно непонятными границами. Понятно, что это может быть приемлемо, если другие требования вынуждают так делать, но в целом стоит рассмотреть репликацию на уровне сервера приложений или дополнительный слой абстракции, который читает CDC и выставляет стабильный контракт.

Технологии

  • Free
    • Debezium
      • одно из самых популярных и широко используемых open-source решений CDC.
      • Он интегрируется с различными базами данных, такими как MySQL, PostgreSQL, MongoDB и другими, и предоставляет механизм для захвата изменений данных и передачи их в целевую систему.
      • на базе Apache Kafka Connect может работать
    • Apache Kafka
      • изначально не был разработан как CDC решение, он может использоваться для создания потоков данных и обмена сообщениями между системами
      • Путем интеграции с CDC-инструментом, таким как Debezium, Kafka можно использовать для захвата и передачи изменений данных.
      • Валидация схем Confluent
    • Maxwell
      • интегрируется с MySQL и захватывает изменения данных, отправляя их на очередь сообщений, такую как Kafka или RabbitMQ
      • Maxwell имеет простой интерфейс и легко настраивается.
    • Bottled Water
      • решение для PostgreSQL, которое захватывает изменения данных и стримит их в формате Avro через Kafka
      • прост в использовании и хорошо подходит для проектов, использующих PostgreSQL
  • Commercial
    • Zeebe
    • QLik
    • Hevo

MSSQL

  • The Debezium SQL Server connector is based on the change data capture feature that is available in SQL Server 2016 Service Pack 1 (SP1) and later Standard edition or Enterprise edition.

Критерии выбора

  • compare
  • Поддерживаемые источники данных
    • Убедитесь, что выбранная CDC система поддерживает используемые вами базы данных или другие источники данных. Уточните, имеется ли поддержка для всех систем, с которыми вы работаете.
  • Режим работы
    • Определите, требуется ли вам репликация данных в режиме реального времени или покадрово. Некоторые CDC системы предлагают только один из этих режимов, поэтому это важно учитывать при выборе.
  • Производительность
    • Изучите, какая производительность обеспечивается выбранным CDC решением. Узнайте, как оно обрабатывает большие объемы данных и насколько быстро может захватывать и реплицировать изменения.
  • Масштабируемость
    • Если вам нужно обрабатывать большие объемы данных или присоединять новые источники данных в будущем, убедитесь, что выбранное CDC решение поддерживает масштабируемость.
  • Интеграция исходящих систем
    • Рассмотрите, как легко интегрировать выбранную CDC систему с другими системами или приложениями, которые вы используете. Узнайте о наличии API, интерфейсов или инструментов интеграции.
  • Безопасность и целостность данных
    • Убедитесь, что выбранная CDC система обеспечивает надежную безопасность данных и контроль доступа. Важно, чтобы данные были защищены от несанкционированного доступа и сохранность была гарантирована.
  • Поддержка и обслуживание
    • Изучите, какая поддержка и обслуживание предоставляются выбранным CDC решением. Узнайте, какая документация и помощь доступны, если возникнут проблемы или вопросы.
  • Стоимость и лицензирование
    • Оцените стоимость выбранного CDC решения и определите, соответствует ли она вашему бюджету. Также учитывайте условия лицензирования и возможные дополнительные расходы.
  • Репутация и отзывы
    • Проведите исследование и ознакомьтесь с репутацией выбранного CDC решения. Ищите отзывы пользователей и оценки, чтобы оценить его надежность и эффективность.
  • Гибкость и настройка
    • Узнайте, какую гибкость предоставляет выбранное CDC решение для настройки и настройки по вашим требованиям. Это позволит вам лучше адаптировать его к уникальным потребностям вашей организации.