или авторизуйтесь, если у вас он уже есть
1. Контекст задачи
Много доменных сервисов, единый источник данных (MongoDB)
Несколько целевых хранилищ: Postgres, ElasticSearch
Требования:
near-real-time синхронизация
масштабирование по объёму и числу сущностей
минимальная нагрузка на source
Почему «просто репликация» не подходит
2. Первая версия: синхронизация через джобы
Periodic batch-job:
читали данные из Mongo
трансформировали
писали в целевую БД
Плюсы:
просто
прозрачно
Минусы, которые быстро всплыли:
высокая latency
сложность масштабирования
нет изоляции ошибок по сущностям
3. Проблемы, которые джобами не решить
Расхождение данных между источником и приёмником
Повторные апдейты и race conditions
Невозможность быстро пересинхронизировать одну сущность
Ручные костыли для частичных падений
Чем больше данных → тем хуже становится всё
4. Переход к CDC и стриминговой архитектуре
Почему решили уйти от batch-подхода
Debezium + Kafka как транспорт изменений
Что реально дало CDC:
инкрементальные изменения
снижение нагрузки на Mongo
Какие новые проблемы появились сразу
5. Архитектура синхронизации сейчас
Разделение на этапы:
Source → Kafka
Converter
Destination
Почему нет «одного универсального пайплайна»
Разные стратегии для:
Mongo
Postgres
Elastic
Как выглядит поток данных end-to-end
6. Consistency на практике
Почему strict consistency невозможна
Как обеспечиваем:
порядок изменений
идемпотентность
корректные апдейты
Работа с повторной доставкой и дублями
7. Latency и её контроль
Где реально теряется время:
Kafka
batching
consumer lag
транзакции в destination
8. Инфраструктура и эксплуатация
Масштабирование консьюмеров
Партиционирование
Dead Letter Queue
Повторная обработка и ресинхронизация
Что происходит при падении одной части пайплайна
9. Сравнение: было vs стало
Batch jobs vs streaming
Latency: минуты → секунды
Нагрузка на source
Управляемость и дебаг
Цена поддержки решения
10. Выводы и уроки
CDC — это начало, а не решение
Архитектура синхронизации важнее инструментов
Consistency и latency — это управляемые компромиссы
Почему мы бы сразу не пошли этим путём заново