Aumentar el rendimiento de Rabbitmq en Multi Machine
-
20-12-2019 - |
Pregunta
Estoy usando LogSTASH y ELASTICSEARCH para construir un sistema de registro. RabbitMQ usó para colar el mensaje de registro entre dos logstashs.
La ruta del mensaje es como a continuación:
source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch
Pero averigüe que, no importa cuánta máquina agregue a RabbitMQ, solo use un recurso de máquina para procesar mensajes.
Me pareció que un artículo dice que el cluster simplemente aumenta la confiabilidad y la redundancia para evitar el mensaje perdido.
Pero lo que quiero es aumentar el rendimiento completo del clúster de Rabbitmq (dentro y fuera) agregando más máquina.
¿Cómo configuro mi clúster de Rabbitmq para aumentar el rendimiento?
Se aprecian cualquier comentario.
-
ps. Necesito agregar más información aquí.
En mi límite de sistema. La prueba I es, puede recibir mensajes de 7000 / S y enviar mensajes 1700 / s de 7000 / s en un sistema de clúster de 4 máquinas, pero no habilitar HA y simplemente vincular a 1 intercambio a 1 cola y la cola solo se une a 1 nodo. Supongo que 1 cola enlace a 1 nodo es el cuello de botella del rendimiento. Y es difícil cambiar la clave de enrutamiento ahora, por lo que tenemos una clave de enrutamiento y queremos distribuir un mensaje a diferentes nodos para aumentar el rendimiento del sistema completo.
a continuación es mi configuración de índice de logsash-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 }
Solución
Necesitas agregar más colas.Supongo que usas solo una cola.Así, en otra palabra, atado a un proceso de Erlang.Lo que desea es usar colas múltiples:
Aquí hay un ejemplo rápido y sucio Cómo agregar algo de lógica a LogSTASH para enviar un mensaje a una cola diferente:
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"] }
}
}
luego en su salida:
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
}
Actualizado:
Eche un vistazo a los repositorios que este tipo tiene: https://github.com/simonmacmullen
Supongo que estarás interesado en este: https://github.com/simonmacmullen/random-exchange
This exchange type is for load-balancing among consumers.