我正在使用dynamodb来创建聚合报告。我的程序每10分钟触发一次,从最近10分钟写入的dynamodb流中获取记录并创建汇总报告。我想知道如何使用python和boto3完成这项工作。我在尝试get_shard_iterator中有一个时间参数,但没有。我需要根据创建日期获取shard_iterator。还有另一种方法可以完成这项工作。
答案 0 :(得分:0)
Kinesis流上的所有内容都按'sequence_number'排序。如果您想要过去10分钟的所有记录,则需要使用新的shard_iterator轮询流,以指定要从哪个序列号开始;然后处理流上的所有内容。
我的建议是在您通过Kinesis发送的数据上附加utc时间戳,然后每10分钟消耗一次,然后重新订购。
大致来自记忆,它应该是这样的:
import boto3
KINESIS_CLIENT = boto3.client('kinesis', region_name='eu-west-1')
stream_name="your stream name"
# you may need to retrieve this from via boto if dynamically generated
shard_id="your shard id"
# how to get the first record from the stream with the starting sequence number
#KINESIS_CLIENT.get_shard_iterator(StreamName=stream_name, ShardId=shard_id, ShardIteratorType='TRIM_HORIZON')
shard_iterator = KINESIS_CLIENT.get_shard_iterator(StreamName=stream_name, ShardId=shard_id,
ShardIteratorType='AFTER_SEQUENCE_NUMBER',
StartingSequenceNumber=sequence_number)
records = KINESIS_CLIENT.get_records(ShardIterator=shard_iterator, Limit=2500)
所有内容都记录在:http://boto3.readthedocs.io/en/latest/reference/services/kinesis.html