У меня есть поток Kinesis с тремя осколками, и приложения Producer записывают в поток случайный ключ раздела. В Kinesis Metri c я обнаружил, что количество GetRecords.Records почти вдвое больше, чем количество PutRecords.Records.
Если быть точным, подсчет (в минуту):
PutRecords.Records: 10749
GetRecords.Records: 21496
Из-за этого процессор записи Kinesis, который в моем случае является лямбда-выражением, получает много повторяющихся записей.
AWS документ действительно предполагает, что будет некоторые дублируются механизмом доставки «хотя бы один раз» потока Kinesis. Но почти двойник GetRecords не очень подходит. Вот мой шаблон SAM для лямбда-выражения процессора.
MyStream:
Type: AWS::Kinesis::Stream
Properties:
Name: my-stream
ShardCount: 3
MyStreamProcessorLambda:
Type: AWS::Serverless::Function
Properties:
FunctionName: my-stream-processor-lambda
...
...
Events:
Stream:
Type: Kinesis
Properties:
Stream: !Ref MyStream
BatchSize: 10000
StartingPosition: LATEST
MaximumBatchingWindowInSeconds: 300
Лямбда-выражение процессора теперь идемпотентно за счет принудительного ограничения БД, так что одна и та же запись из пакета никогда не будет вставлена в БД. Также коэффициент ошибок лямбда равен 0. ( Нет ошибок / повторных попыток лямбда )
Также GetRecords.IteratorAgeMilliseconds в метриках потока равно 0 и Превышение пропускной способности чтения / записи равно 0.
Таким образом, я бы вы хотите избавиться от этих повторяющихся записей в пакете, лямбда обрабатывается.
Любая конфигурация здесь пошла не так?