2017-03-09 3 views
0

Nous avons actuellement une application qui reçoit une grande quantité de données de capteur. Chaque capteur possède son propre identifiant de capteur (par exemple, '5834f7718273f92cc326f620') et émet son statut à différents intervalles. L'ordre de traitement des messages entrants n'est pas important, par exemple un nouveau message d'un capteur peut être traité avant un message plus ancien d'un autre capteur. Ce qui importe cependant, c'est que chaque message pour un capteur donné doit être traité séquentiellement; dans l'ordre qu'ils sont arrivés dans le courant.AWS Kinesis Stream en file d'attente FIFO

J'ai jeté un oeil à la bibliothèque client Kinesis et je comprends que KCL envoie des messages à un seul processeur par partition. Cela signifie-t-il que si un flux n'a qu'un seul fragment, il n'aura qu'un seul processeur et ne pourrait-il pas créer un goulot d'étranglement? Ou est-ce que KCL a plus d'un processeur, et d'une manière ou d'une autre, en utilisant peut-être la clé de partition, les messages avec la même clé de partition ne sont jamais traités simultanément?

Remarque: Nous avons jeté un coup d'œil sur sqs fifo, mais nous l'avons exclu car la limite de 300 messages par seconde deviendrait bientôt un problème.

Répondre

1

Oui, chaque fragment ne peut avoir qu'un processeur à un moment donné (par application). Mais, vous pouvez utiliser l'identifiant du capteur comme clé de partition pour votre requête d'enregistrement de kinésis. (see here)

Ceci s'assurera que tous ces événements de capteur entreront dans le même fragment et le même processeur. Si vous faites cela, vous serez en mesure de mettre à l'échelle vos processus et les fragments et de toujours traiter chaque événement de capteur dans un seul processeur