Зачем это нужно?
Практически в каждую компанию, в каждый проект когда-нибудь постучится в дверь необходимость мигрировать данные из одного хранилища в другое, либо же поддерживать актуальность данных в двух различных хранилищах. Причем самое неприятное, когда одно из хранилищ является СУБД другого типа, либо вовсе не является СУБД, а каким-нибудь объектным хранилищем. Однако, эта проблема решаема и помогут нам в этом Debezium, Kafka, а также механизм CDC.
Обзор
CDC - это подход к интеграции данных, основанный на идентификации, регистрации и доставке изменений, внесенных в корпоративные источники данных, во внешние системы. Если проще, то это механизм, который позволяет нам отслеживать изменения в СУБД и на основе этого предпринимать действия с этими изменениями.
Debezium - это набор коннекторов для различных СУБД, совместимых с Apache Kafka Connect.
Общая архитектура использования Debezium с официального сайта:

Также есть Debezium Server, который является конфигурируемым, готовым к использованию приложением, которое передает события изменений из исходной базы данных в различные Data Lake.

В реальности данная общая архитектура немного не подходит, ведь помимо наполнения нашего Data Lake - конечного звена на схемах с различными хранилищами данных, события, отправленные в Apache Kafka, могут быть использоваться вашими приложениями для решения различных ситуаций:
- потоковое шифрование данных
- проверка консистентности во время передачи
- удаление неактуальных данных из кэша
- отправка уведомлений
- обновления поисковых индексов
- некое подобие логов аудита
Отслеживание изменений в СУБД обеспечивается через чтение WAL-файлов. Поэтому база данных должна быть сконфигурирована должным образом, заданы REPLICA IDENTITY у необходимых таблиц и т д.
Заключение
На этом у меня все, надеюсь данная статья была вам полезна и вы о ней вспомните при необходимости мигрировать данные. Более подробно про Debezium можно прочитать тут: https://debezium.io/