web-dev-qa-db-fra.com

Amazon Kinesis et commande garantie

Amazon affirme que son produit de streaming Kinesis garantit une commande record.

Il permet de commander les enregistrements, ainsi que la possibilité de lire et/ou de relire les enregistrements dans le même ordre (...)

Kinesis est composé de Streams eux-mêmes composés d'un ou plusieurs Shards. Les enregistrements sont stockés dans ces fragments. Nous pouvons écrire des applications grand public qui se connectent à un Shard et lire/relire les enregistrements dans l'ordre où ils ont été stockés.

Mais Kinesis peut-il garantir, dès le départ, la commande du Stream lui-même sans pousser la logique de commande aux consommateurs? Comment un consommateur peut-il lire les enregistrements de plusieurs fragments du même flux, en s'assurant que les enregistrements sont lus dans le même ordre qu'ils ont été ajoutés au flux?

15
Dante

Il semble que cela ne soit pas possible. La commande est garantie au niveau du fragment, mais pas sur l'ensemble du flux.

https://brandur.org/kinesis-order

Revenons donc à notre question initiale: comment pouvons-nous garantir que tous les enregistrements sont consommés dans le même ordre dans lequel ils sont produits? La réponse est que nous ne pouvons pas, mais que nous ne devons pas laisser cette triste réalité nous déranger trop. Une fois que nous avons mis à l'échelle notre flux en plusieurs fragments, il n'y a aucun mécanisme que nous pouvons utiliser pour garantir que les enregistrements sont consommés dans l'ordre sur l'ensemble du flux; que dans un seul éclat.

11
Dante

Si vous avez besoin d'un ordre garanti de toutes les données du flux, vous ne pouvez avoir qu'un seul fragment. Bien sûr, cela ne se transforme pas très bien. Ce que vous devez déterminer, c'est si vous avez vraiment besoin de ce niveau de données commandées. Toutes les données du flux sont-elles liées à toutes les autres données? La clé est de mettre les données en fragments lorsque les données sont liées. Utilisez plusieurs fragments pour permettre à vos données d'être traitées en parallèle. Si toutes les données associées sont réunies dans un même fragment, vous pouvez profiter de la commande garantie. Si vous avez vraiment besoin de toutes les données à commander, vous devrez simplement faire face à la mise à l'échelle limitée qui vient nécessairement avec cela.

1
Jason Wadsworth