Контрольно-пропускной пункт AWS Kinesis Stream
У меня есть приложение, которое может обрабатывать дубликаты записей потока Kinesis. Мы рассматриваем подходы, которые мы могли бы использовать в отношении обработки сбоев. И был поднят следующий подход:
Если исключение обнаружено во время processRecords
, то приложение не проверяет. После этого запись будет отправлена снова вместе со следующей партией, косвенно выполнив попытку.
Поэтому мой вопрос - когда речь идет о контрольных точках для потоков Kinesis, ожидается ли, что приложение будет всегда проверять контрольные точки на регулярной основе? Считается ли манипулирование механизмом контрольных точек анти-паттерном?
Спасибо
1 ответ
Я хочу сначала уточнить кое-что о контрольно-пропускных пунктах, которые могут изменить вашу точку зрения. Если я не совсем неверно понимаю ваш вопрос, он меньше "манипулирует" механизмом контрольных точек и больше "использует его по прямому назначению".
- Контрольная точка - это, по сути, механизм, позволяющий возобновить обработку потока с последней позиции контрольной точки (вместо самой ранней доступной записи или "сейчас").
- Пропуск контрольной точки НЕ означает автоматически, что записи будут автоматически повторяться со следующим пакетом - вам нужно обработать исключение, перезапустив процессор обработки записей из некоторой позиции потока перед ошибкой (обычно это "последняя контрольная точка", чтобы сделать это).
В целом, цель состоит в том, чтобы использовать Kinesis для управления полезной обработкой - обычно повторная обработка дублирующихся записей бесполезна (и просто стоит ваших денег, выплачиваемых AWS). Чекпоинт часто означает меньше времени и денег, тратящихся на переработку дубликатов записей.
Вы можете устанавливать контрольные точки на основе времени (каждые X секунд), записи (каждой записи Y), каждой партии, никогда или чего угодно - все зависит от того, сколько отходов вы допустите в случае сбоя.
Примечание. Имейте в виду, что механизм контрольных точек поддерживается таблицей DynamoDB, поэтому есть некоторые незначительные затраты (обеспечение достаточной пропускной способности таблицы), чтобы делать это слишком часто.