Описанное требование может быть решено как в потоковой, так и в пакетной модели в SCDF.И, похоже, вы уже можете хорошо относиться к обеим функциям.:)
Несколько вариантов для рассмотрения.
Для # 1, поскольку у вас нет способа убедить команду базы данных добавить новый столбец в существующую таблицу, вы можете построитьпользовательское потоковое / пакетное приложение, которое имитирует то, что делает JDBC-источник, но вместо этого использует другое хранилище данных для отслеживания уже «увиденных» или «обработанных» записей.В конечном счете, вам потребуется некоторая форма постоянного хранилища / кэша, чтобы решить, какие строки обрабатывать, а не.
В качестве альтернативы, вы можете создать собственный источник, основанный на возможностях CDC, которые поддерживаются в базах данных.Мы пытаемся создать его, используя Debezium [см .: spring-cloud-stream-app-starters / app-starters-release # 173 ], и по этому вопросу есть POC на tzolov / cdc-debezium .При этом вы просто полагаетесь на модель событий CDC поддерживаемых баз данных, чтобы автоматически получать только новые записи из таблицы.
Не стесняйтесь опробовать POC и прокомментируйте проблему # 173 со своими выводами / вариантами использования.
# 2 - это скорее вопрос дизайна.Если большой результат должен быть обработан за один раз, подходит ли он для потоковой модели?Возможно, вы могли бы спроектировать это как задачу / пакетное задание, чтобы обрабатывать их в автономном режиме, чтобы у вас было больше возможностей для восстановления после сбоя и перезапуска.
Однажды, когда у вас есть CDC-подобный источник,в любом случае вы получите только новые события / строки, так что они могут автоматически обращаться к управлению потоком.