Итак, в источниках (source1, source2 и т.д.) содержатся данные, которые должны быть реплицированы или переданы в реальном времени в другие системы для дальнейшей обработки и анализа. Для захвата изменений (
CDC) может использоваться
Debezium — инструмент, предназначенный для мониторинга и репликации данных в реальном времени из различных источников данных (таких как MySQL, PostgreSQL и другие) в формате транзакционных журналов баз данных (также известных как журналы изменений или WAL).
Debezium подписывается на журналы изменений баз данных и захватывает все операции CRUD (Create, Read, Update, Delete), преобразуя их в структурированные события, которые затем передаются через Kafka Connect.
Kafka Connect — это фреймворк, предоставляемый Apache Kafka, который позволяет интегрировать Kafka с различными системами для потоковой обработки данных. Debezium работает как плагин для Kafka Connect, что позволяет передавать события изменений данных, полученные Debezium, напрямую уже в Kafka.
После того как данные попадают в Apache Kafka, приложение потоковой обработки данных в реальном времени, написанное, например, с использованием Spark Streaming или Flink, может читать эти данные из Kafka, попутно выполняя вычисления в реальном времени.
После чтения данных потоковое приложение записывает данные as-is в Data Lake в сырой слой данных (Raw). В качестве объектного хранилища может быть развёрнуто облачное объектное хранилище AWS S3 (как показано на схеме) либо как альтернативные варианты на HDFS.
Для хранения большого объёма данных они сохраняются в колоночном формате Parquet с использованием табличного формата Iceberg для организации эффективного доступа к ним. Далее для передачи данных из сырого слоя в операционный слой ODS могут применяться такие движки как Spark и
Airflow, обеспечивающие автоматизацию процессов обработки данных. Spark выполняет вычисления и анализ данных, а Airflow управляет планированием и выполнением пакетных рабочих процессов.
Поскольку ODS содержит операционные данные организации и возможно потоковые данные, имеет смысл сделать этот слой доступным для операционных аналитиков и ML. Сделать это можно с помощью
Trino, механизма распределённых SQL-запросов с открытым исходным кодом, предназначенного для чтения больших наборов данных, распределённых на одном или нескольких разнородных источниках данных.
Для загрузки данных из слоя ODS непосредственно в DWH в слой DDS можно использовать связку Airflow + dbt (data build tool).
dbt — это фреймворк с открытым исходным кодом, предназначенный для перемещения данных между слоями в DWH и выполнения различных трансформаций данных (очистка, дедупликация, агрегирование, фильтрация, обогащение), а также для формирования документации и линейджа. Один из сценариев использования — формирования слоя DDS в модели Data Vault. Airflow в данном случае помогает оркестрировать задачи, которые извлекают данные и загружают их в хранилище. Dbt, как правило, позволяет аналитикам, использующим SQL, преобразовывать и трансформировать данные, которые уже находятся в хранилище. Инструменты Airflow + dbt также служат для передачи данных дальше в аналитический слой Mart.
На практике для обслуживания процессов CDC и загрузки данных из источников в сырой и операционный слои DWH сегодня чаще всего используется Spark. Для трансформаций данных и формирования аналитического слоя удобна связка Airflow + dbt. Однако, в зависимости от требований проекта и квалификации команды инженеров может быть построена собственная система с микросервисной архитектурой, реализующая ELT-операции с помощью приложений, написанных на Python, Go, Java и других языках программирования. Это встречается не часто, поскольку тот же Airflow уже является стандартом индустрии с удобным веб-интерфейсом и инструментами поддержки и мониторинга, в то время как для микросервисов необходимо самостоятельно настраивать системы мониторинга и алертинга.
В
следующей статье мы подробнее рассмотрим подход Data Vault и его практическое использование для проектирования хранилища данных.