У нас есть традиционное пакетное приложение, в котором мы принимаем данные из нескольких источников (Oracle, Salesforce, FTP-файлы, веб-журналы и т. Д.). Мы сохраняем входящие данные в S3-контейнере и запускаем Spark на EMR для обработки данных и загрузки на S3 и Redshift.
Теперь мы думаем о том, чтобы сделать это приложение практически в режиме реального времени, добавив AWS Kinesis, а затем используя Spark Structured Streaming из EMR для обработки потоковых данных и загрузки их в S3 и Redshift. Учитывая, что у нас различное разнообразие данных, например Более 100 таблиц из Oracle, более 100 объектов Salesforce, более 20 файлов, поступающих с FTP-узла, из веб-журналов и т. Д., Как лучше использовать AWS Kinesis здесь.
1) Использование отдельного потока для каждого источника (Salesforce, Oracle, FTP), а затем использование отдельного шарда (в потоке) для каждой таблицы / объекта - каждый потребитель читает из своего собственного шарда, который имеет определенную таблицу / файл
2) Использование отдельного потока для каждой таблицы / объекта - в этом сценарии у нас будет более 500 потоков.
3) Использование единого потока для всего - не уверен, как потребительское приложение будет читать данные в этом сценарии.