30 votes

Kafka Streaming Concurrency ?

J'ai un code Kafka Streaming de base qui lit des enregistrements à partir d'un sujet, effectue un certain traitement et envoie des enregistrements à un autre sujet.

Comment le streaming Kafka gère-t-il la concurrence ? Tout s'exécute-t-il dans un seul fil d'exécution ? Je ne vois rien de tel dans la documentation.

S'il s'agit d'un traitement monofilaire, j'aimerais disposer d'options de traitement multifilaire pour gérer de gros volumes de données.

S'il est multithread, je dois comprendre comment cela fonctionne et comment gérer les ressources, comme les connexions à la base de données SQL qui doivent être partagées dans différents threads de traitement.

L'API de streaming intégrée de Kafka n'est-elle pas recommandée pour les scénarios à fort volume par rapport aux autres options (Spark, Akka, Samza, Storm, etc.) ?

42voto

miguno Points 723

Comment le streaming Kafka gère-t-il la concurrence ? Tout s'exécute-t-il dans un seul thread ? Je ne vois rien de tel dans la documentation.

Ce point est documenté en détail à l'adresse suivante http://docs.confluent.io/current/streams/architecture.html#parallelism-model . Je ne veux pas copier-coller ce texte ici textuellement, mais je veux souligner qu'à mon avis, l'élément clé à comprendre est celui de l'utilisation de l'énergie. partitions (cf. les partitions de sujets de Kafka, qui, dans Kafka Streams, sont généralisées en "partitions de flux" car tous les flux de données traités ne passent pas par Kafka) car une partition est actuellement ce qui détermine le parallélisme de Kafka (côté courtier/serveur) et des applications de traitement de flux qui utilisent l'API Kafka Streams (côté client).

S'il s'agit d'un traitement monofilaire, j'aimerais disposer d'options de traitement multi-filaire pour gérer de gros volumes de données.

Traitement une partition sera toujours effectuée par un seul "thread", ce qui permet d'éviter les problèmes de concurrence. Mais...

S'il est multithread, je dois comprendre comment cela fonctionne et comment gérer les ressources, comme les connexions à la base de données SQL qui doivent être partagées dans différents threads de traitement.

...parce que Kafka permet à un sujet d'avoir plusieurs partitions, vous obtenez un traitement parallèle. Par exemple, si un sujet possède 100 partitions, jusqu'à 100 tâches de flux (ou, pour simplifier à l'extrême, jusqu'à 100 machines différentes exécutant chacune une instance de votre application) peuvent traiter ce sujet en parallèle. Là encore, chaque tâche de diffusion obtiendra un accès exclusif à une partition, qu'elle pourra ensuite traiter.

L'API de streaming intégrée de Kafka n'est-elle pas recommandée pour les scénarios à fort volume par rapport aux autres options (Spark, Akka, Samza, Storm, etc.) ?

Le moteur de traitement des flux de Kafka est définitivement recommandé et est également utilisé dans la pratique pour les scénarios à fort volume. L'analyse comparative est toujours en cours, mais dans de nombreux cas, une application basée sur Kafka Streams s'avère plus rapide. Voir Le blog de l'ingénieur LINE : Application de Kafka Streams au pipeline interne de livraison de messages pour un article de LINE Corp, l'une des plus grandes plateformes sociales d'Asie (plus de 220 millions d'utilisateurs), qui décrit comment elle utilise Kafka et l'API Kafka Streams en production pour traiter des millions d'événements par seconde.

7voto

Nicholas Points 8468

La configuration des kstreams num.stream.threads vous permet de modifier le nombre de threads à partir de 1. Cependant, il peut être préférable d'exécuter simplement plusieurs instances de votre application de streaming, toutes exécutant le même groupe de consommateurs. Ainsi, vous pouvez faire tourner autant d'instances que nécessaire pour obtenir un partitionnement optimal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X