web-dev-qa-db-fra.com

Kafka: API de consommateurs vs API de flux

J'ai récemment commencé à apprendre Kafka) et je me retrouve avec ces questions.

  1. Quelle est la différence entre Consumer et Stream? Pour moi, si un outil/une application consomme des messages de Kafka est un consommateur du monde Kafka.

  2. En quoi Stream diffère-t-il car il consomme ou produit également des messages vers Kafka? et pourquoi est-il nécessaire, car nous pouvons écrire notre propre application client à l'aide de l'API consommateur et les traiter au besoin ou les envoyer à Spark à partir de l'application consommateur?

J'ai consulté Google à ce sujet, mais je n’ai pas obtenu de bonne réponse à cet égard. Désolé si cette question est trop triviale.

61
SR Nathan

Mise à jour du 9 avril 2018: De nos jours, vous pouvez également utiliser [ ~ # ~] ksql [~ # ~] , le moteur de streaming SQL de Kafka, pour traiter vos données dans Kafka. KSQL est basé sur l’API Streams de Kafka. Il offre également un support de premier ordre pour les "flux" et les "tables". Pensez-y comme le frère SQL de Kafka Streams où vous n'avez pas besoin d'écrire de code de programmation dans Javaou Scala.

quelle est la différence entre l'API grand public et l'API Streams?

L'API Streams de Kafka ( https://kafka.Apache.org/documentation/streams/ ) repose sur les clients producteurs et consommateurs de Kafka. Il est nettement plus puissant et aussi plus expressif que le Kafka client consommateur. Voici quelques-unes des fonctionnalités de l'API Kafka Streams:

  • Prend en charge une sémantique de traitement exactement une fois (versions de Kafka 0.11+)
  • Prise en charge de tolérance de panne stateful (ainsi que stateless, bien sûr) traitement incluant la diffusion en continu rejoint , agrégations et fenêtrage . En d'autres termes, il prend en charge la gestion immédiate de l'état de traitement de votre application.
  • Prend en charge le traitement au moment de l'événement ainsi que le traitement basé sur le temps de traitement et le le temps d'ingestion
  • Possède un support de première classe pour les flux et les tables , où le traitement de flux rencontre les bases de données; en pratique, la plupart des applications de traitement de flux nécessitent à la fois des flux ET des tables pour implémenter leurs cas d'utilisation respectifs. Ainsi, si une technologie de traitement de flux ne présente aucune des deux abstractions (par exemple, aucun support pour les tableaux), vous êtes soit bloqué, soit devez implémenter manuellement cette fonctionnalité vous-même. (bonne chance avec ça...)
  • Prend en charge les requêtes interactives (également appelées "état interrogeable") pour exposer les derniers résultats de traitement à d'autres applications et services
  • Plus expressif: il est livré avec (1) un style de programmation fonctionnel [~ # ~] dsl [~ # ~] avec des opérations telles que map, filter, reduce ainsi que (2) un style impératif API du processeur pour par exemple effectuer un traitement des événements complexes (CEP), et (3) vous pouvez même combiner le DSL et l’API du processeur.

Voir http://docs.confluent.io/current/streams/introduction.html pour une introduction plus détaillée, mais toujours de haut niveau, à Kafka Streams. API, qui devrait également vous aider à comprendre les différences par rapport au client consommateur de niveau inférieur Kafka. Il existe également un didacticiel basé sur Docker pour l'API Kafka Streams , sur lequel j'ai écrit un article sur plus tôt cette semaine. .

Alors, en quoi l’API Kafka Streams est-elle différente, car elle consomme ou produit également des messages vers Kafka?

Oui, l'API Kafka Streams peut lire et écrire des données sur Kafka.

et pourquoi est-il nécessaire, car nous pouvons écrire notre propre application client à l'aide de l'API consommateur et les traiter au besoin ou les envoyer à Spark à partir de l'application consommateur?

Oui, vous pouvez écrire votre propre application client. Comme je l’ai déjà mentionné, l’API Kafka Streams utilise le client consommateur Kafka (plus le client producteur), mais vous devez d'implémenter manuellement toutes les fonctionnalités uniques fournies par l'API Streams. Voir la liste ci-dessus pour tout ce que vous obtenez "gratuitement". Il est donc plutôt rare qu'un utilisateur choisisse le client consommateur de bas niveau plutôt que l'API Kafka Streams, plus puissante.

76
Michael G. Noll