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