Given an application that processes a high volume of messages and requires a resilient architecture to manage potential processing bottlenecks, which approach would most effectively guarantee no loss of messages and facilitate recovery for messages that could not be processed after multiple attempts?
Deploy an Amazon Kinesis stream and attach a Lambda function to process the streamed records, ensuring the function has robust exception handling.
Create an SQS Delay Queue to postpone the delivery of new messages and give the system time to recover from any current processing delay.
Apply a backoff retry strategy on a Lambda function triggered by message arrival, ensuring that temporary processing issues are mitigated.
Set up an Amazon SQS queue and configure a dead-letter queue (DLQ) to catch messages that fail to be processed after a certain number of attempts.