2017-09-19 4 views
3

J'ai besoin de données de courtiers kafka, mais pour un accès rapide, j'utilise plusieurs consommateurs avec le même groupe id appelé groupes de consommateurs. Mais après avoir lu par chaque consommateur, comment pouvons-nous combiner des données provenant de plusieurs consommateurs? Y a-t-il une logique?Nous lisons les données des courtiers à travers plusieurs consommateurs en utilisant le groupe de consommateurs, mais comment les données consommées sont combinées?

Répondre

2

De par leur conception, différents consommateurs d'un même groupe de consommateurs traitent les données indépendamment les uns des autres. (Ce comportement est ce qui permet aux applications d'évoluer correctement.)

Mais après avoir lu par chaque consommateur, comment pouvons-nous combiner des données provenant de plusieurs consommateurs? Y a-t-il une logique?

La courte mais réponse légèrement simplifiée lorsque vous utilisez « API des consommateurs » de Kafka (aussi appelé: bibliothèque « client consommateur »), qui je pense est ce que vous utilisez sur la base du libellé de votre question: Si vous avez besoin Pour combiner des données provenant de plusieurs consommateurs, l'option la plus simple consiste à rendre ces (nouvelles) données d'entrée disponibles dans un autre sujet de Kafka, où vous effectuez la combinaison dans une étape de traitement ultérieure. Un exemple trivial serait: l'autre, deuxième sujet Kafka serait configuré pour avoir seulement 1 partition, de sorte que toute étape de traitement ultérieur verrait toutes les données qui doivent être combinées. Si cela semble un peu trop compliqué, je suggère d'utiliser l'API Streams de Kafka, ce qui facilite beaucoup la définition de tels flux de traitement (par exemple des jointures ou des agrégations, comme dans votre question). En d'autres termes, Kafka Streams vous donne beaucoup de la «logique» intégrée que vous recherchez: https://kafka.apache.org/documentation/streams/

0

Le but de Kafka est de vous fournir un framework évolutif, performant et tolérant aux pannes. Avoir un groupe de consommateurs lisant les données de différentes partitions de manière asynchrone vous permet d'archiver les deux premiers objectifs. Le regroupement des données est un peu en dehors du flux standard de Kafka - vous pouvez implémenter une seule partition avec un seul consommateur dans le cas le plus simple, mais je suis sûr que ce n'est pas ce que vous voulez.

Pour des choses telles que l'agrégation de l'état unique de différents consommateurs, je vous recommande d'appliquer une solution conçue spécifiquement pour ce genre de buts. Si vous travaillez en termes de Hadoop, vous pouvez utiliser Storm Trident bolt qui vous permet d'agréger les données de vos becs Kafka. Ou vous pouvez utiliser Spark Streaming qui vous permettrait de faire la même chose mais d'une manière un peu différente. Ou, en option, vous pouvez toujours implémenter votre composant personnalisé avec une telle logique en utilisant les librairies Kafka standard.