web-dev-qa-db-fra.com

Spring-Kafka contre Spring-Cloud-Stream (Kafka)

En utilisant Kafka comme système de messagerie dans une architecture de microservices, quels sont les avantages d'utiliser Spring-Kafka par rapport à Spring-Cloud-Stream + Spring-Cloud-Starter-Stream-Kafka?

Le framework Spring Cloud Stream prend en charge plus de systèmes de messagerie et a donc une conception plus modulaire. Mais qu'en est-il de la fonctionnalité? Y a-t-il un écart entre la fonctionnalité de spring-kafka et spring-cloud-stream + spring-cloud-starter-stream-kafka? Quelle API est la mieux conçue?

Au plaisir de lire vos opinions

22
Eike Behrends

Spring Cloud Stream avec kafka binder s'appuie sur Spring-kafka. Ainsi, le premier a toutes les fonctionnalités prises en charge par la suite, mais le premier sera plus lourd. Ci-dessous quelques points vous aident à faire le choix:

  1. Si vous pourriez changer kafka dans un autre middleware de message à l'avenir, alors le flux Spring Cloud devrait être votre choix car il cache les détails d'implémentation de kafka.
  2. Si vous souhaitez intégrer un autre milieu de message avec kafka, vous devriez opter pour le flux Spring Cloud, car son argument de vente est de faciliter cette intégration.
  3. Si vous voulez profiter de la simplicité et ne pas accepter les frais généraux de performance, choisissez Spring-Kafka
  4. Si vous prévoyez de migrer vers un service de cloud public, utilisez alors le flux de nuages ​​de printemps qui fait partie de la famille de nuages ​​de printemps.
6
Warren Zhu

Utilisez Spring Cloud Stream lorsque vous créez un système où n canal est utilisé pour l'entrée effectue un certain traitement et l'envoie à n canal de sortie. En d'autres termes, il s'agit davantage d'un système RPC pour remplacer les appels API RESTful par exemple.

Si vous prévoyez de faire un système de sourcing d'événements, utilisez Spring-Kafka où vous pouvez publier et vous abonner au même flux. C'est quelque chose que Spring Cloud Stream ne vous permet pas de faire facilement car il interdit les éléments suivants

public interface EventStream {
    String STREAM = "event_stream";

    @Output(EventStream.STREAM)
    MessageChannel publisher();

    @Input(EventStream.STREAM)
    SubscribableChannel stream();
}

Voici quelques éléments que Spring Cloud Stream vous aide à éviter de faire:

  • configuration des sérialiseurs et désérialiseurs
4
Archimedes Trajano