Как отложить обработку сообщений AWS Kinesis?

Я хочу отложить обработку сообщений из потока AWS Kinesis на один час. Я настроил потребителя KCL для чтения пакета записей каждые четыре минуты, проверки отметки времени каждой записи и остановки обработки пакета, если какая-либо из записей меньше часа, без контрольной точки. Я надеялся, что один и тот же экземпляр потребителя будет перечитывать одни и те же сообщения каждые четыре минуты, пока весь пакет не станет достаточно старым для обработки, с последующим установлением контрольной точки потребителя. Однако на практике потребитель читает сообщения только один раз, что означает, что они игнорируются и никогда не читаются снова, когда они готовы к обработке. Есть ли способ настроить потребителя на перечитывание всех сообщений с последней контрольной точки каждый раз?


person landonvg    schedule 03.12.2019    source источник
comment
Я связался со службой поддержки AWS, и они ответили, что клиентский экземпляр KCL по замыслу читает сообщение только один раз, поэтому такой подход не работает. Я был бы удовлетворен, если бы смог настроить потребителя так, чтобы он не читал сообщения старше одного часа, но я тоже не вижу способа сделать это. Они рекомендовали изучить использование Kinesis Analytics. Буду признателен за любую помощь или руководство о том, как отложить обработку записей Kinesis.   -  person landonvg    schedule 03.12.2019


Ответы (1)


Мне бы хотелось получить что-то подобное (конфигурация, которая может задерживать доставку события) прямо из коробки из AWS Kinesis Stream. В отсутствие этого есть способ отложить обработку события за счет потраченных впустую вычислений.

Используйте SQS (или FIFO SQS, если вам важен порядок событий) вместо Kinesis или используйте AWS Lambda в Kinesis Stream для передачи событий в SQS. SQS поддерживает задержку доставки сообщения до 15 минут. Поскольку вам нужна задержка в 60 минут, вы можете запустить другую Lambda (или своего собственного потребителя SQS) для обработки сообщения. При первой доставке сообщения в Lambda (или ваш SQS-потребитель) не обрабатывайте сообщение, а просто установите таймаут видимости сообщения до 45 минут (в сумме с требуемой задержкой в ​​60 минут). Обрабатывайте сообщение SQS только после его получения во второй раз. Вы можете проверить, сколько раз сообщение было доставлено, прежде чем принять решение о том, хотите ли вы обработать или пропустить обработку сообщения.

person rajneesh2k10    schedule 17.07.2020