Tempête-Kafka plusieurs becs, comment répartir la charge de travail?

Je suis en train de partager les tâches entre plusieurs becs. J'ai une situation, où je reçois un tuple/message à la fois de source externe et je veux avoir plusieurs instances d'un bec verseur, l'intention principale derrière est le partage de la charge et augmenter l'efficacité des performances.

Je peux faire la même avec un Bec verseur lui-même, mais j'ai envie de partager la charge sur plusieurs becs. Je ne suis pas en mesure d'obtenir la logique de répartir la charge. Depuis le décalage des messages ne seront pas connus jusqu'à ce que le particulier bec finitions de la consommation de la partie (j'.e, basée sur la taille du tampon set).

Quelqu'un peut s'il vous plaît mettre quelque lumière sur la façon de travailler sur la logique/algorithme?

Merci d'avance pour votre temps.


Mise à jour en réponse à des réponses:
Maintenant utilisée multi-partitions sur Kafka (j'.e 5)
Voici le code utilisé:
builder.setSpout("spout", new KafkaSpout(cfg), 5);

Testé par les inondations avec 800 MB données sur chaque partition, et il a fallu ~22 sec de finir de lire.

Encore une fois, utilisé le code avec parallelism_hint = 1
c'est à dire builder.setSpout("spout", new KafkaSpout(cfg), 1);

Maintenant, il a pris plus de ~23 sec! Pourquoi?

Selon Tempête Docs setSpout() déclaration est la suivante:

public SpoutDeclarer setSpout(java.lang.String id,
                              IRichSpout spout,
                              java.lang.Number parallelism_hint)

où,
parallelism_hint - le nombre de tâches que doit être attribué à l'exécution de ce bec. Chaque tâche s'exécute sur un fil dans un processus quelque part autour de l'amas.

OriginalL'auteur Amol M Kulkarni | 2013-08-16