我有一个具有三个分片的Kinesis流,并且Producer应用程序使用随机的分区键将其写入该流。在Kinesis Metric中,我发现GetRecords.Records的计数几乎是PutRecords.Records计数的两倍。
精确计数(在一分钟内:)>
PutRecords.Records:10749
GetRecords.Records:21496
因此,在我的情况下,lambda的Kinesis记录处理器将获得很多重复的记录。
AWS文档确实建议在“at least once” delivery mechanism of Kinesis stream.处进行一些重复,但是GetRecords的几乎两倍不是很合适。这是我的处理器lambda的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
现在,处理器lambda通过强制执行DB约束而成为幂等,以使来自Batch的同一记录永远不会插入DB中。而且Lambda的错误率是0。(Lambda没有错误/重试
<<< [[[GetRecords.IteratorAgeMilliseconds
是0,读取/写入吞吐量超出]是0。因此,我想摆脱批处理中的那些重复记录,lambda正在处理。这里任何配置出错了吗?我有一个具有三个分片的Kinesis流,并且Producer应用程序使用随机的分区键将其写入该流。在Kinesis Metric中,我发现GetRecords.Records的计数几乎是...
GetRecords