Kafka ou SNS ou autre chose?

Désolé si c'est une question de newbie. Mais j'essaie de comprendre ce que je dois utiliser. D'après ce que J'ai compris, Kafka est:

Apache Kafka est un système de messagerie distribué publish-subscribe.

et SNS est aussi un système pub / sub.

mon but est d'utiliser un système de messagerie de file d'attente sur AWS avec une application qui sera distribuée sur quelques serveurs. Par le moyen (la langue principale est le Python). Et parce qu'il est sur amazon, ma première pensée était d'utiliser SNS et LP. Mais j'ai vu beaucoup de gens utiliser Kafka sur AWS. Quels sont les avantages les uns par rapport aux autres?

31
demandé sur Vor 2013-05-08 23:55:37

2 réponses

Le cas d'utilisation de Kafka et Amazon SQS/ Amazon SNS sont très différents.

Kafka, comme vous l'avez écrit, est un système distribué, système de publication-souscription. Il est conçu pour traiter des milliers de messages par seconde. Bien sûr, vous devez le configurer et le regrouper pour vous-même. Il soutient des lecteurs multiples, qui peuvent "rattraper" avec le flot de messages à n'importe quel point (bien, aussi longtemps que les messages sont encore sur le disque). Vous peut l'utiliser à la fois comme une file d'attente (en utilisant des groupes de consommateurs) et comme un sujet.

une caractéristique importante est que vous ne pouvez pas reconnaître sélectivement les messages comme "traités"; la seule option est de reconnaître tous les messages jusqu'à un certain décalage.

SQS/SNS sur l'autre main:

  • pas d'installation/aucun entretien
  • soit une file d'attente (SQS) ou un thème (SNS)
  • limites diverses (sur la taille, la durée de vie d'un message), etc)
  • débit limité: vous pouvez faire des requêtes par lots et simultanées, mais atteindre des débits élevés serait coûteux
  • Je ne suis pas sûr si les messages sont répliqués; cependant au moins-une fois garantie de livraison dans les LP suggérerait ainsi
  • SNS a des notifications pour les e-mails, SMS, SQS, HTTP intégré. Avec Kafka, vous devriez probablement le coder vous-même!--16-->
  • pas de message "flux" concept

donc dans l'ensemble je dirais Les LP / SNS sont bien adaptés pour des tâches plus simples et des charges de travail avec un volume de messages plus faible.

40
répondu adamw 2016-06-09 19:10:03

C'est un classique de trade-off:

AWS tools (SQS, SNS)

il vous sera plus facile de les configurer et de les intégrer au reste de votre architecture, surtout si la plupart d'entre elles fonctionnent déjà sur AWS. Il sera également probablement moins cher au début, car ils ont un bon salaire que vous allez modèle, mais le coût ne sera pas échelle ainsi, donc vous devez réfléchir à ce sujet.

Apache Kafka

ici, vous utilisez un très populaire (pas à la mode) distribué (c'est important si vous pensez que vous allez mettre à l'échelle beaucoup) PUB/sous-modèle. De nos jours, ce modèle semble être très prisé, car l'exécution d'analyses sur les données passant par les tuyaux est très fréquente, et généralement avec une architecture SOA, vous pouvez avoir une multitude de petits services consommant les messages et faire là chose, sans avoir les données être retiré de la file d'attente. Vous bénéficiez également d'un beaucoup d'options de configuration, donc, en fonction de votre utilisation, vous pouvez l'affiner à à vos besoins. Cela signifie plus de travail, mais un service plus optimisé sur la route.

résumé

il s'agit d'un compromis classique de la vitesse de développement et de la facilité de développement par rapport à la meilleure solution, très modulaire et personnalisable, qui a plus de frais généraux pour la première mise en œuvre, mais les échelles mieux.

Conseil Personnel

si vous êtes en train de prototyper quelque chose, favorisez la vitesse de développement, Donc AWS tools. Si vos exigences sont gelées et nécessitent échelle significative, certainement prendre le temps d'utiliser kafka. Je crois aussi beaucoup à l'utilisation de-open-source-makes-the-world-better, mais ce n'est pas le plus gros argument à utiliser.

18
répondu nichochar 2016-06-09 16:18:07