Повторный запуск функции AWS Lambda, которая читает из очереди Kafka - PullRequest
0 голосов
/ 20 апреля 2020

Я написал AWS лямбда-функцию, которая запускается каждые 15 минут. Функция читает из очереди Kafka в течение 2 минут, сохраняет их во временном файле и по истечении 2 минут, если загружает файл в корзину S3.

В настоящее время в корзине нет лямбда Роль IAM в его политике записи, поэтому загрузка на S3 вызывает исключение. Все это нормально, и как только соответствующие политики добавлены, исключений быть не должно.

У меня есть некоторые сомнения по поводу вышесказанного:

  1. Функция лямбда продолжает поступать после каждых 2 минут. Это потому, что предыдущий вызов закончился с ошибкой?
  2. Поскольку я читаю из Kafka, я использую фиксированный идентификатор группы, чтобы не читать сообщения дважды. Предположим, что лямбда выходит из строя на полпути из-за какой-то проблемы (не проблемы с подключением, а чего-то другого). Если появится другая функция, она начнет читать с последнего прочитанного сообщения. Однако, поскольку предыдущий вызов не удался на полпути и не смог записать сообщения в корзину S3, второй вызов пропустит эти сообщения. Есть ли способ, которым я не пропускаю эти сообщения? (У меня есть идея сохранить смещения в S3 после завершения каждого вызова и назначить эти смещения вручную потребителю, чтобы в случае сбоя любого вызова на полпути не возникли смещения и я не потерял ни одного сообщения. Но если есть способ избежать чтения с S3, это было бы здорово).

1 Ответ

0 голосов
/ 23 апреля 2020

После некоторого копания и игры с лямбдой я наконец получил ответы:

  1. Да, lambda function повторно запускается несколько раз, если предыдущий вызов заканчивается с ошибкой. Это можно настроить в свойствах lambda.

  2. Запись в корзину S3 была конечным шагом. Так как я хотел убедиться, что смещения не будут обновлены для следующего вызова, идея состояла в том, чтобы установить auto-commit для consumer-configurations в false. Затем выполните ручную фиксацию после завершения записи в корзину S3. Это гарантирует, что следующий вызов лямбды начнёт чтение с начала, если запись на S3 не удалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...