Precision of AWS Kinesis PutRecord ordering

时间:2016-07-11 21:35:12

标签: amazon-web-services amazon-kinesis

Based on the Kinesis docs, there is a 'coarse ordering' (based on time) with the PutRecord. What is the precision of this ordering? Seconds? Milliseconds? I can't find precision statements anywhere.

2 个答案:

答案 0 :(得分:1)

可能不在文档中,但基于对此服务的一般理解:

  • "粗"订购是指按照服务器接收和内部存储顺序的简单方式。如果您有一个单线程记录生产者,他们将按您发送的顺序排列。

  • 一旦处理多个生产者线程/主机,它完全取决于哪个请求首先通过网络,进入AWS,以及命令请求的后端代码。即使在请求B之前收到请求A,请求B也可以更快地通过后端代码,因此存储得更快。

现在,使用该信息为您的问题提供更具体的答案:

  • 实际上,后端代码非常快 - 与AWS有良好连接的单线程Kinesis生产者(例如EC2)可以支持每个50-200单记录PutRecord个调用范围内的某个地方第二。基于此,很可能是这种粗糙"在5-20毫秒的范围内。

如果需要确切排序,请考虑使用单线程生产者和/或使用SequenceNumberForOrdering参数

答案 1 :(得分:1)

生成器方面,放置在同一分片上的记录是顺序的。

但是,如果推送到流的多个记录放在不同的分片上,并且排序对您很重要;你应该检查消费者方面每条记录的“ApproximateArrivalTimestamp”值。

在Java中,该时间戳值为java.util.Date,分辨率以毫秒为单位。

  

每个Amazon Kinesis记录都包含一个值,   ApproximateArrivalTimestamp,在流成功时设置   接收并存储记录。这通常被称为a   服务器端时间戳,而a时设置客户端时间戳   数据生成器创建或发送记录到流(数据生成器)   例如,是将数据记录放入流中的任何数据源   与PutRecords)。时间戳具有毫秒精度。有   无法保证时间戳准确性或时间戳   总是在增加。例如,分片中或流中的记录   可能有时间戳错误。

http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html