Comment savoir si Apache Kafka est fait pour vous

Apache Kafka a beaucoup évolué au niveau de la fonctionnalité et de la portée ces dernières années. Il est utilisé dans la production par un tiers des entreprises du Fortune 500, y compris sept des 10 plus grandes banques mondiales, huit des 10 plus grandes compagnies d’assurance et neuf des 10 plus grandes entreprises de télécommunications aux États-Unis [source].

Cet article vous donne un aperçu des fonctionnalités de base offertes par Kafka. Je présenterai de nombreux exemples pour vous aider à comprendre les schémas d'utilisation courants. Espérons que vous trouverez une corrélation avec vos propres flux de travail afin que vous puissiez commencer à tirer parti de la puissance de Kafka. Commençons par examiner deux fonctionnalités de base offertes par Kafka.

1. Kafka en tant que système de messagerie

La messagerie est largement utilisée de deux manières:

  • Mise en file d'attente (SQS, céleri, etc.): les consommateurs de file d'attente agissent en tant que groupe de travailleurs. Chaque message est envoyé à un seul des processus de travail, ce qui divise effectivement le travail.
  • Publish-Subscribe (SNS, PubNub, etc.): les abonnés sont généralement indépendants les uns des autres. Chaque abonné reçoit une copie de chaque message. Il agit comme un système de notification.

Les deux sont des paradigmes utiles. Faire la queue divise le travail et convient parfaitement à la tolérance aux pannes et à l’échelle. Publier-Souscrire permet aux abonnés multiples de découpler vos systèmes. La beauté de Kafka réside dans le fait qu’il associe les paradigmes de mise en file d'attente et de publication / abonnement dans un système de messagerie robuste et unique.

Je recommande fortement de lire la documentation qui explique la conception sous-jacente et comment cette combinaison est réalisée à l'aide de groupes de sujets, de partitions et de consommateurs. Pour être juste, cette fonctionnalité peut également être obtenue avec la combinaison RabbitMQ ou SNS-SQS.

2. Kafka pour le traitement de flux

Une fois que vous disposez d’un système de messagerie robuste et évolutif, vous avez simplement besoin d’un moyen simple de traiter le flux de messages. Stream API fournit justement cela. Il s’agit d’une bibliothèque client Java (maintenant également Scala) qui fournit une abstraction de niveau supérieur aux API de producteur et de consommateur.

Cela facilite l'exécution:

  • opérations sans état, telles que le filtrage et la transformation des messages de flux
  • opérations avec état, telles que jointure et agrégation sur une fenêtre temporelle

L'API de flux gère la sérialisation / désérialisation des messages et maintient l'état requis pour les opérations avec état.

Montre moi du code

Voici un exemple d'API de flux qui lit le texte brut sur le flux d'entrée, compte les occurrences de chaque mot et écrit le compte dans un flux de sortie. Voir la version complète ici.

Avec le fenêtrage, il est facile d’agréger sur une période donnée et de garder une trace de mots tels que les mots-clés du jour (ce qui n’est pas démontré ici).

Cas d'utilisation typiques de Kafka (exemples)

  • Imaginez que vous dirigiez un site Web de voyage. Le prix des hôtels et des vols ne cesse de changer. Quelques composants de votre système (alertes de prix, analyses) doivent être informés de ces modifications. Vous publiez les modifications sur les rubriques Kafka et chaque composant à notifier agit en tant qu'abonné. Tous les nœuds d'un même système d'abonné forment un seul groupe de consommateurs. Un message donné est envoyé à un seul nœud du groupe de consommateurs. De cette manière, chaque composant reçoit la copie du message et le travail est efficacement divisé en chaque composant.
  • L'activité du site Web (pages vues, recherches ou autres actions que les utilisateurs peuvent entreprendre) peut être suivie et analysée via Kafka. En fait, c’était le cas d’utilisation original pour lequel Kafka avait été inventé par LinkedIn. Les activités de site Web sont publiées sur des sujets centraux avec un sujet par type d'activité. Le flux peut être traité en temps réel pour obtenir des informations sur l'engagement de l'utilisateur, les abandons, les flux de page, etc.
  • Imaginez que vous ayez des données de localisation provenant de balises GPS ou de smartphones et que vous souhaitiez les traiter en temps réel pour indiquer le trajet du véhicule, la distance parcourue, etc. Les données entrantes peuvent être publiées sur des sujets Kafka et traitées avec Stream API. Le traitement avec état avec fenêtrage s'avère pratique lorsque vous devez extraire et traiter toutes les données de localisation d'un utilisateur donné pendant une certaine période.

Quand ne pas utiliser Kafka

  • Si vous ne pouvez pas ou ne voulez pas passer à Java / Scala pour les services qui parlent au cluster Kafka, alors vous allez manquer toutes les abstractions de niveau supérieur fournies par Kafka Streams. L’API Streams est essentiellement une bibliothèque cliente parlant au cluster Kafka. Confluent, la société derrière Kafka, se concentre actuellement sur Java. Les langues populaires comme Python ont également un problème en suspens depuis plus d’un an et demi.
  • Si tout ce dont vous avez besoin est une file d'attente de tâches, pensez plutôt à RabbitMQ. Avec Kafka, chaque partition ne peut être consommée que par un seul consommateur. Et vous devez décider de la partition tout en mettant la tâche sur la file d'attente. Il est donc possible qu’un flot de tâches sur une partition donnée puisse provoquer la famine, et vous ne pouvez rien faire car l’ajout de consommateurs n’aide en rien.
  • Si vous ne traitez que quelques milliers de messages chaque jour, Kafka est probablement surpayé. Kafka est vraiment conçu pour gérer le traitement de flux à grande échelle. Par conséquent, son installation et sa maintenance ne valent pas la peine si vous n’avez pas / anticipez l’échelle.

C’est tout. Ceci couvre les choses importantes que vous devez savoir sur Apache Kafka. Si vous avez aimé le lire, suivez mon blog. Faites-moi savoir si vous souhaitez voir un aperçu de tout autre outil.

Voir tous les messages de Amit Rathi

Publié à l'origine sur blog.amirathi.com le 3 mars 2018.