Augmentez le débit de rabbbitmq à Multi Machine
-
20-12-2019 - |
Question
J'utilise LOGSTASH et ElasticSeSearch pour créer un système de journal. Rabbbitmq utilisé pour faire la queue Message du journal entre deux brapshs.
Le chemin de message est comme ci-dessous:
source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch
Mais je comprends que, peu importe la quantité de machine que j'ai ajoutée à rabbbitmq, il utilise simplement une ressource machine pour traiter les messages.
J'ai trouvé un élément d'article dire que le cluster augmente simplement la fiabilité et la redondance pour empêcher le message perdu.
Mais ce que je veux, c'est d'augmenter le débit de grappe de lapbitmq entier (dans et out) en ajoutant plus de machine.
Comment configurer mon groupe RabbitMQ pour augmenter le débit informatique?
Tous les commentaires sont appréciés.
-
ps. Je dois ajouter plus d'informations ici.
Dans ma limite de mon système I Test est, peut recevoir des messages de 7000 / S et une sortie de 500 / s de sortie 1700 / S dans 4 systèmes de grappes de machine, mais ne permet pas d'activer HA et de simplement lier 1 échange à 1 file d'attente et la file d'attente vient de se lier à 1 noeud. Je suppose qu'une file d'attente 1 liaison à 1 noeud est le goulot d'étranglement du débit. Et c'est difficile à modifier la clé de routage maintenant, nous n'avons donc qu'une seule clé de routage et que vous souhaitez distribuer un message à différents nœuds pour accroître le débit du système complet.
ci-dessous est mon configuration de Logstash-indexer
rabbitmq {
codec => "json"
auto_delete => false
durable => true
exchange => "logstash-exchange"
key => "logstash-routingKey"
queue => "logstash-queue"
host => "VIP-of-rabbitMQ"
user => "guest"
password => "guest"
passive => false
exclusive => false
threads => 4
prefetch_count => 512 }
La solution
Vous devez ajouter plus de files d'attente.Je suppose que vous n'utilisez qu'une seule file d'attente.Donc, dans un autre mot, vous avez attaché à un processus Erlang.Ce que vous voulez, utilisez plusieurs files d'attente:
Voici un exemple rapide et sale Comment ajouter une certaine logique à la connexion à la connexion à envoyer un message à une file d'attente différente:
filter {
# check if path contains source subfolder
if "foo" in [path] {
mutate { add_field => [ "source", "foo"] }
}
else if "bar" in [path] {
mutate { add_field => [ "source", "bar"] }
}
else {
mutate { add_field => [ "source", "unknown"] }
}
}
Puis dans votre sortie:
rabbitmq {
debug => true
durable => true
exchange_type => "direct"
host => "your_rabbit_ip"
key => "%{source}"
exchange => "my_exchange"
persistent => true
port => 5672
user => "logstash"
password => "xxxxxxxxxx"
workers => 12
}
Mise à jour:
Regardez les référentiels que ce gars a: https://github.com/simonmacmullen
Je suppose que vous allez être intéressé par celui-ci: https://github.com/simonmacmullen/random-exchange
This exchange type is for load-balancing among consumers.