Как использовать потоки AWS Kinesis для нескольких разных источников данных - PullRequest
0 голосов
/ 10 сентября 2018

У нас есть традиционное пакетное приложение, в котором мы принимаем данные из нескольких источников (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) Использование единого потока для всего - не уверен, как потребительское приложение будет читать данные в этом сценарии.

1 Ответ

0 голосов
/ 10 сентября 2018

Kinesis не заботится о том, какие данные вы помещаете в поток, данные - это просто капля для Kinesis. Вам будет необходимо определить (закодировать) авторов и читателей для потока. Вы можете смешивать разные типы данных в одном потоке, тогда потребителю потребуется выяснить, что представляет собой каждый BLOB-объект и что с ним делать.

Я бы разбил это на несколько потоков в зависимости от типа данных и приоритета данных. Это значительно упростит реализацию и отладку.

Я думаю, вы неправильно понимаете, что такое осколки. Они предназначены для повышения производительности, а не для разделения данных.

...