#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’?