Vous pouvez utiliser Kafka comme magasin d'événements, mais je ne recommande pas de le faire, bien que cela puisse sembler être un bon choix :
- Kafka garantit seulement une livraison au moins une fois et il y a des doublons dans le magasin d'événements qui ne peuvent pas être supprimés. Mise à jour : Ici vous pouvez lire pourquoi c'est si difficile avec Kafka et quelques dernières nouvelles sur comment atteindre enfin ce comportement : https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/
- En raison de l'immuabilité, il n'y a pas moyen de manipuler le magasin d'événements lorsque l'application évolue et que les événements ont besoin d'être transformés (bien sûr, il y a des méthodes comme l'upcasting, mais...). On pourrait dire que vous n'avez jamais besoin de transformer les événements, mais cela n'est pas une hypothèse correcte, il pourrait y avoir des situations où vous effectuez une sauvegarde des originaux, mais vous les mettez à niveau vers les dernières versions. C'est une exigence valide dans les architectures orientées événements.
- Aucun endroit pour persister les instantanés des entités/agrégats et la relecture va devenir de plus en plus lente. Créer des instantanés est une fonctionnalité incontournable pour le magasin d'événements à long terme.
- Comme les partitions de Kafka sont distribuées et qu'elles sont difficiles à gérer et à sauvegarder par rapport aux bases de données. Les bases de données sont tout simplement plus simples :-)
Donc, avant de faire votre choix, réfléchissez à deux fois. Le magasin d'événements comme combinaison de interfaces de couche d'application (surveillance et gestion), de stockage SQL/NoSQL et de Kafka en tant que courtier est un meilleur choix que de laisser Kafka gérer les deux rôles pour créer une solution complète et fonctionnelle.
Le magasin d'événements est un service complexe qui nécessite plus que ce que Kafka peut offrir si vous êtes sérieux au sujet de l'application de la source d'événements, CQRS, Sagas et autres schémas dans une architecture orientée événements et maintenir de hautes performances.
N'hésitez pas à remettre ma réponse en question ! Vous pourriez ne pas aimer ce que je dis à propos de votre courtier préféré avec de nombreuses fonctionnalités en chevauchement, mais tout de même, Kafka n'a pas été conçu comme un magasin d'événements, mais plutôt comme un courtier haute performance et tampon en même temps pour gérer les scénarios de producteurs rapides versus consommateurs lents, par exemple.
Veuillez consulter le framework open source de microservices eventuate.io pour découvrir d'autres problèmes potentiels : http://eventuate.io/
Mise à jour du 8 février 2018
Je n'incorpore pas de nouvelles informations des commentaires, mais je suis d'accord sur certains de ces aspects. Cette mise à jour concerne davantage des recommandations pour une plateforme d'événements microservices. Si vous êtes sérieux au sujet de la conception robuste des microservices et des performances les plus élevées possibles en général, je vous donnerai quelques indications qui pourraient vous intéresser.
- N'utilisez pas Spring - c'est génial (je l'utilise moi-même beaucoup), mais c'est lourd et lent en même temps. Et ce n'est pas du tout une plateforme de microservices. C'est "juste" un framework pour vous aider à en implémenter un (beaucoup de travail derrière cela..). D'autres frameworks sont "juste" des frameworks REST légers ou JPA ou d'autres frameworks à orientation différente. Je recommande probablement la meilleure plateforme de microservices open-source complète disponible qui revient aux racines du Java pur : https://github.com/networknt
Si vous vous interrogez sur les performances, vous pouvez vous comparer vous-même avec la suite de benchmarks existante. https://github.com/networknt/microservices-framework-benchmark
-
N'utilisez pas du tout Kafka :-)) C'est à moitié une blague. Je veux dire que même si Kafka est génial, c'est un autre système centré sur le courtage. Je pense que l'avenir est dans les systèmes de messagerie sans courtage. Vous pourriez être surpris, mais il y a des systèmes plus rapides que Kafka :-), bien sûr vous devez descendre au niveau inférieur. Regardez Chronicle.
-
Pour le magasin d'événements, je recommande une extension supérieure de Postgresql appelée TimescaleDB, qui se concentre sur le traitement haute performance des données de séries chronologiques (les événements sont des séries chronologiques) en grande quantité. Bien sûr, CQRS, la source d'événements (rejeu, etc. fonctionnalités) sont intégrées dans le framework light4j par défaut qui utilise Postgres comme stockage bas.
-
Pour la messagerie, essayez de regarder Chronicle Queue, Map, Engine, Network. Je veux dire, débarrassez-vous de ces vieilles solutions centrées sur le courtage et passez à un système de micro-messagerie (embarqué). Chronicle Queue est en fait encore plus rapide que Kafka. Mais je suis d'accord que ce n'est pas une solution tout-en-un et vous devez faire un peu de développement sinon vous allez acheter la version Entreprise (payante). En fin de compte, l'effort de construire à partir de Chronicle votre propre couche de messagerie sera compensé par l'élimination de la charge de maintenance du cluster Kafka.