Весенний облачный поток данных для ETL - PullRequest
0 голосов
/ 01 марта 2019

мы пытаемся разработать решение ETL, используя поток данных Spring Cloud.

Требования в основном следующие:

  1. Запрос к базе данных внешнего источника с доступом только для чтения, который можетбыть размером ~ 400 000 строк
  2. Выполнить минимальное преобразование / Качество данных
  3. Выгрузка / приемка в витрине данных postgres с использованием приемника jdbc.(обрежьте таблицу перед ежедневной загрузкой)
  4. Выполните это каждые 24 часа

Некоторые проблемы, с которыми мы столкнулись:

  • Мы пытались использовать JDBC- исходное приложение для подключения к исходным базам данных,
    однако существуют ограничения для баз данных, к которым мы обращаемся, поскольку они принадлежат другому отделу, поэтому функция jdbc.update для обновления исходной базы данных для пометки строки как "seen "не может быть использован.

  • Есть ли рекомендуемый способ запроса и просмотра большого набора результатов без нехватки памяти?Параметр jdbc.max-row-per-poll в этой ситуации кажется неподходящим.

Мы предпочитаем не использовать Tasks / Batch, так как конвейер потоков намного мощнее и чище (данныеможет течь через поток и трансформироваться).Кто-нибудь успешно использовал потоки SCDF для достижения аналогичной цели или он просто не предназначен для этого варианта использования?

1 Ответ

0 голосов
/ 02 марта 2019

Описанное требование может быть решено как в потоковой, так и в пакетной модели в SCDF.И, похоже, вы уже можете хорошо относиться к обеим функциям.:)

Несколько вариантов для рассмотрения.

Для # 1, поскольку у вас нет способа убедить команду базы данных добавить новый столбец в существующую таблицу, вы можете построитьпользовательское потоковое / пакетное приложение, которое имитирует то, что делает JDBC-источник, но вместо этого использует другое хранилище данных для отслеживания уже «увиденных» или «обработанных» записей.В конечном счете, вам потребуется некоторая форма постоянного хранилища / кэша, чтобы решить, какие строки обрабатывать, а не.

В качестве альтернативы, вы можете создать собственный источник, основанный на возможностях CDC, которые поддерживаются в базах данных.Мы пытаемся создать его, используя Debezium [см .: spring-cloud-stream-app-starters / app-starters-release # 173 ], и по этому вопросу есть POC на tzolov / cdc-debezium .При этом вы просто полагаетесь на модель событий CDC поддерживаемых баз данных, чтобы автоматически получать только новые записи из таблицы.

Не стесняйтесь опробовать POC и прокомментируйте проблему # 173 со своими выводами / вариантами использования.

# 2 - это скорее вопрос дизайна.Если большой результат должен быть обработан за один раз, подходит ли он для потоковой модели?Возможно, вы могли бы спроектировать это как задачу / пакетное задание, чтобы обрабатывать их в автономном режиме, чтобы у вас было больше возможностей для восстановления после сбоя и перезапуска.

Однажды, когда у вас есть CDC-подобный источник,в любом случае вы получите только новые события / строки, так что они могут автоматически обращаться к управлению потоком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...