获取最近N分钟记录Dynamodb Streams

时间:2016-07-22 10:53:00

标签: amazon-web-services amazon-dynamodb boto3 amazon-dynamodb-streams

我正在使用dynamodb来创建聚合报告。我的程序每10分钟触发一次,从最近10分钟写入的dynamodb流中获取记录并创建汇总报告。我想知道如何使用python和boto3完成这项工作。我在尝试get_shard_iterator中有一个时间参数,但没有。我需要根据创建日期获取shard_iterator。还有另一种方法可以完成这项工作。

1 个答案:

答案 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

相关问题