From AWS documentation:
A Kinesis data stream is an ordered sequence of data records. Each record in the stream has a sequence number that is assigned by Kinesis Data Streams
I don't see any connection between those 2 sentences. Also, the documentation doesn't explicitly specify what type of ordering it is.
After a small investigation, I found out that if we are using AWS producer library (for example, KPL
), the order which the lib successfully sent to Kinesis records is maintained when consuming from Kinesis. The problem is, this order of records doesn't guarantee to be equal to the order of records I sent to any library.
Application -(1)> KPL -(2)> Kinesis
The order is determined by the sequence of records which successfully sent from KPL to Kinesis. (In case of network failures, a record will be sent from KPL again, after other records will be sent).
A definition of the word randomly is here:
Of or relating to an event in which all outcomes are equally likely...
My conclusion is that an application sends records to kinesis in a random order which means, there is no order at all. In case an application must guarantee any type of order, it must create its own library and not use theirs.
Am I missing something here?