Я пишу приложение Spark Streaming, в котором входные данные помещаются в корзину S3 небольшими партиями (используя Database Migration Service - DMS).Приложение Spark является единственным потребителем.Я рассматриваю две возможные архитектуры:
- Пусть Spark Streaming наблюдает за префиксом S3 и выбирает новые объекты по мере их поступления
- Потоковые данные из S3 в поток Kinesis (черезЛямбда-функция запускается, когда DMS создает новые объекты S3) и использует поток в качестве входных данных для приложения Spark.
Хотя второе решение будет работать, первое решение проще.Но есть ли подводные камни?Глядя на это руководство , я обеспокоен двумя конкретными моментами:
Чем больше файлов в каталоге, тем больше времени потребуется для поиска изменений - даже если файлов нетбыли изменены.
Мы будем хранить данные S3 в течение неопределенного времени.Таким образом, число объектов под отслеживаемым префиксом будет увеличиваться очень быстро.
«Полные» файловые системы, такие как HDFS, обычно устанавливают время изменения в своих файлах, как только создается выходной поток,Когда файл открывается, даже до того, как данные полностью записаны, они могут быть включены в DStream - после чего обновления файла в том же окне будут игнорироваться.То есть: изменения могут быть пропущены, а данные пропущены в потоке.
Я не уверен, относится ли это к S3, поскольку, как я понимаю, объекты создаются атомарно и не могут быть впоследствии обновлены, как есть.случай с обычными файлами.