Amazonは、Kinesisストリーミング製品がレコードの順序を保証すると主張しています。
レコードの順序付け、および同じ順序でレコードを読み取ったり再生したりする機能を提供します(...)
キネシスは、1つ以上のシャードで構成されるストリームで構成されます。レコードはこれらのシャードに保管されます。シャードに接続し、保存された順序でレコードを読み取り/再生するコンシューマーアプリケーションを作成できます。
しかし、Kinesisは、注文ロジックをコンシューマーにプッシュすることなく、そのままでストリーム自体の注文を保証できますか?コンシューマーは同じストリームの複数のシャードからレコードを読み取り、ストリームに追加されたのと同じ順序でレコードが読み取られるようにするにはどうすればよいですか?
これは達成できないようです。順序はシャードレベルで保証されますが、すべてのストリーム全体では保証されません。
https://brandur.org/kinesis-order
それでは、元の質問に戻ります。すべてのレコードが生成されたのと同じ順序で消費されることをどのように保証できますか?その答えは、私たちにはできないということですが、その不幸な現実に過度に悩まされてはなりません。ストリームを複数のシャードにスケーリングした後は、ストリーム全体でレコードが順番に消費されることを保証するために使用できるメカニズムはありません。単一のシャード内のみ。
ストリーム内のすべてのデータの保証された順序が必要な場合、シャードは1つしか持てません。もちろん、それはあまりスケールしません。決定する必要があるのは、そのレベルの順序付けされたデータが本当に必要かどうかです。ストリーム内のすべてのデータは他のすべてのデータに関連していますか?重要なのは、データが関連付けられているときにデータをシャードに配置することです。複数のシャードを使用して、データを並列処理できるようにします。すべての関連データが1つのシャードにまとめられている場合は、保証された順序を利用できます。注文するすべてのデータが本当に必要な場合は、必然的にそれに伴う制限されたスケーリングに対処する必要があります。