Есть ли способ удалять сообщения в SQS с потоком данных после их поступления в PubSub?

#amazon-web-services #google-cloud-platform #google-cloud-dataflow #apache-beam #amazon-sqs

#amazon-web-services #google-облачная платформа #google-облако-поток данных #apache-beam #amazon-sqs

Вопрос:

У меня есть следующая инфраструктура: Поток данных используется для отправки сообщений из AWS SQS в Pub / Sub Google Cloud. Сообщения считываются с помощью java и Apache Beam (SqsIO).

Есть ли способ с помощью потока данных удалять сообщения в AWS SQS после их поступления / чтения в PubSub и как это будет выглядеть? Можно ли это сделать на Java с помощью Apache Beam?

Заранее благодарим вас за любые ответы!

Ответ №1:

Встроенной поддержки удаления сообщений нет, но вы можете добавить код для удаления сообщений, которые считываются из AWS SQS с помощью Beam ParDo. Но вы должны выполнять такое удаление с осторожностью.

Бегун луча выполняет чтение с использованием одного или нескольких рабочих элементов. Данный рабочий элемент может завершиться сбоем в любое время, и программа-исполнитель обычно повторно запускает сбойный рабочий элемент. Кроме того, большинство бегунов объединяют несколько шагов. Например, если у вас есть Read преобразование, за которым следует удаление ParDo , бегун может объединить эти преобразования и выполнить их вместе. Теперь, если рабочий элемент завершается с ошибкой после частичного удаления данных, повторный запуск такого рабочего элемента может завершиться с ошибкой или может привести к неверным данным.

Обычное решение — добавить разрыв слияния между двумя шагами. Вы можете добиться этого с помощью преобразования Beam Reshuffle.viaRandomKey() (или просто добавив любое преобразование, использующее groupByKey). Например, поток вашей программы может быть следующим.

 pipeline
    .apply(SqsIO.read())
    .apply(Reshuffle.viaRandomKey())
    .apply(ParDo.of(new DeleteSQSDoFn()))
    .apply(BigQuery.Write(...))
  

Комментарии:

1. не могли бы вы дать ссылку, где задокументировано ‘DeleteSQSDoFn’?