Сбор данных об изменениях (CDC) с помощью Spark Streaming SQL

Что такое сбор данных об изменениях?

Если вы инженер по обработке данных, CDC не будет казаться вам чуждым. Это подход к интеграции данных, основанный на проверке, фиксации и доставке изменений в интерфейс источника данных. CDC может помочь загрузить исходную таблицу в озеро данных. В базе данных или источнике приложения хранится огромное количество данных, и группа специалистов по работе с данными хотела бы проанализировать эту таблицу. Выполнение запросов к действующей производственной базе данных может привести к снижению производительности внешнего приложения. Процесс / конвейер CDC используется для загрузки таблицы во внешнее озеро данных. Приложения, которым требуется доступ, могут использовать ETL или ad-hoc для целевой таблицы, хранящейся в озере данных, для анализа.

Возможные архитектурные особенности

Существует множество решений CDC, включая инкрементные запланированные задания импорта или задания в реальном времени. Sqoop - это инструмент с открытым исходным кодом, который можно использовать для передачи данных между Hadoop и реляционной базой данных. Команда может создавать ежедневные задания, которые можно использовать для загрузки данных в озеро данных. Это по-прежнему может создать огромную нагрузку на базу данных и повлиять на производительность. Следовательно, необходимо составить график, чтобы гарантировать, что производительность приложения не пострадает. Этот сценарий может серьезно ограничить запросы и анализ в реальном времени помимо ограничений, которые дополнительно имеет Sqoop.

Проблема с предыдущей архитектурой заключается в нагрузке и узких местах, которые она создает в базе данных приложения. Чтобы решить эти проблемы, мы можем использовать binlog. Binlog - это набор файлов журнала последовательности, которые затем могут записывать или вставлять, обновлять, удалять операции. Для этого потокового конвейера CDC с использованием binlog, во-первых, мы можем использовать какой-либо исходный код для нас, например JSON или Maxwell, для синхронизации binlog с Kafka или какой-либо другой сопоставимой службой. Затем нижележащие приложения могут использовать потоковую передачу Spark для использования темы из секвенирования Kafka. Последовательность анализирует запись бинарного журнала в целевой системе хранения. Мы могли бы поддерживать Insert, Update, Delete, как Kudu, data или HBase. Это решение сопряжено с рядом операционных проблем, если объем данных слишком велик, особенно с Kudu.

Основываясь на наших предыдущих соображениях по архитектуре, binlog будет ограничивать нагрузку на базу данных приложения, но это приведет к ряду других проблем. Мы можем решить эти операционные проблемы и проблемы с помощью Spark Streaming SQL. Мы могли бы построить процесс / конвейер CDC, используя Spark Streaming SQL. Мы можем управлять Streaming SQL, чтобы проанализировать двоичный журнал и объединить их в озеро данных.

Оркестровка для Spark Streaming SQL

SQL - это декларативный язык. Почти все инженеры данных обладают навыками SQL, особенно в работе с базами данных и хранилищами данных, такими как MySQL, HIVESQL или SparkSQL. Преимущество использования Stream SQL, даже если разработчики не знакомы с Spark Streaming, Java или Scala, они все равно могут легко разработать потоковую обработку. Кроме того, это также невысокая стоимость, если вы хотите перейти с лучшего задания SQL на задание потокового SQL.

В рамках этой оркестровки мы должны синхронизировать бинлог таблицы с Kafka с помощью Debezium или других подобных продуктов. Binlog - это другой формат, поэтому парсер binlog также будет отличаться от обычного парсера. Мы можем использовать Spark Streaming SQL, чтобы использовать binlog из Kafka и проанализировать binlog, используя тип операции этой записи, например, вставить, обновить или удалить, а затем мы можем объединить эти прошлые данные записи с озером данных. На внутреннем уровне Spark Streaming получает потоки входных данных в реальном времени и разделяет данные на пакеты, которые затем обрабатываются механизмом Spark для генерации окончательного потока результатов в пакетах.

Шаг первый, мы должны создать две таблицы, одна из которых является таблицей Kafka, а другая - целевой таблицей данных. Шаг второй, мы создаем потоковое сканирование поверх таблицы Kafka и устанавливаем некоторые параметры в разделе опций, такие как изучение смещений, максимальное смещение для каждого триггера. На третьем шаге будет размещена основная логика конвейера CDC. Мы создаем экран, чтобы заключить слияние в операторы и параметры задания. Шаг четвертый, мы можем использовать команду Streaming SQL для запуска файла SQL. Эта команда запустит задание потоковой передачи в клиентском режиме. Как только это будет установлено и задание будет запущено, мы сможем просмотреть конвейер потоковой передачи CDC. На этом этапе мы можем проверить, можем ли мы запросить таблицу данных во внешней ссылке, если есть некоторые изменения данных в таблице исходной базы данных, и они должны совпадать. Для каждого пакета потоковой передачи мы вызываем функцию слияния данных, чтобы объединить запись двоичного журнала синтаксического анализа с целевой таблицей данных. На этом оркестровка должна быть завершена.

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

Заключение

Вышеупомянутый процесс должен предоставить способ настройки базового конвейера CDC, который может относительно хорошо обрабатывать миллиарды событий CDC. Мы также можем выполнить обновление, удаление режима соотношения в таблице данных. Помимо решения, команда может поддерживать применение и развитие схемы, что может обеспечить лучшее качество данных и управление данными. Путешествие во времени предоставляет моментальные снимки данных, после чего мы можем запросить любое более раннее ухудшение данных. Только Spark может записывать данные через данные, включая пакетный режим и режим потоковой передачи, а также использовать Presto для того, как Spark может запрашивать данные из данных.

Заинтересованы в изучении науки о данных?



Подпишитесь на нашу новостную рассылку Acing AI, если вам интересно: