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.
答案 0 :(得分:1)
可能不在文档中,但基于对此服务的一般理解:
"粗"订购是指按照服务器接收和内部存储顺序的简单方式。如果您有一个单线程记录生产者,他们将按您发送的顺序排列。
一旦处理多个生产者线程/主机,它完全取决于哪个请求首先通过网络,进入AWS,以及命令请求的后端代码。即使在请求B之前收到请求A,请求B也可以更快地通过后端代码,因此存储得更快。
现在,使用该信息为您的问题提供更具体的答案:
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