Задний план

Я пишу это главным образом потому, что, исследуя тему, я не смог найти достойного примера, но также потому, что я хотел, чтобы люди знали, насколько легко использовать функции ES6 с KCL и не впадать в отчаяние и не впадать в ад обратного вызова, подразумеваемый примерами в документы AWS.

Amazon Kinesis - платформа потоковой обработки. KCL или Клиентская библиотека Kinesis - это библиотека, написанная на Java, которая предназначена для помощи со всеми задачами, связанными с потоковой обработкой - балансировкой нагрузки, контрольными точками и обработкой сбоев. Использование NodeJS с Kinesis и KCL хорошо описано в Документации AWS.

Я занимаюсь разработкой программного обеспечения в компании Compit, занимающейся оценкой недвижимости, и искал Amazon Kinesis, чтобы ускорить обработку данных.

Текущая настройка

Наш процесс обработки данных - это не новый проект, у нас уже есть конвейер, он написан на NodeJS, как и большинство наших проектов. Мы не хотели его переписывать, мы хотели использовать Kinesis для масштабирования процесса. Мы также твердо верим в то, что нужно идти в ногу с технологиями, особенно когда речь идет о выбранном нами языке и используемых нами пакетах, поэтому, как только Async / Await был включен по умолчанию в NodeJS, мы обновили и включили поддержку для это в наших проектах. Одним из наших требований при оценке кинезиса была возможность использовать новейшие языковые функции при работе с ним.

KCL с Async / Await

Заставить KCL работать с async await оказалось на удивление просто. В своем примере AWS использует стиль обратных вызовов и объект, в котором есть функции, выполняющие фактическую обработку.

И ниже почти такой же пример с использованием класса для определения процессора записи, деструктуризации и for-of для просмотра записей и async / await для записи прогресса в файл.

Он далек от завершения, здесь и там по-прежнему есть обратные вызовы, и контрольная точка также должна быть обернута обещанием, но этот код позволяет вам легко использовать async / await с KCL.

Отладка

Отладка kcl, который вызывает ваш процессор данных как дочерний процесс, кажется сложной.

Вы запускаете kcl, вызывая что-то вроде:

./node_modules/aws-kcl/bin/kcl-bootstrap -e -p consumer.properties

и в consumer.properties вы определяете процесс узла, который должен выполнять kcl: executablename = node kinesisConsumer.js.

Но отладка довольно проста, все, что вам нужно сделать для отладки потребителя, - это добавить —-inspect-brk после исполняемого файла узла в файл свойств, и KCL запустит процесс узла и остановится на первой строке. Я использую VS Code для присоединения к процессу, но вы можете использовать любой отладчик.

Я хотел бы услышать ваши отзывы об этом посте и спасибо за то, что прочитали!