我使用logstash和elasticsearch构建日志系统。 RabbitMQ用于在两个logstash之间对日志消息进行排队。
消息路径如下所示:
source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch
但我发现,无论我向RabbitMQ添加多少机器,它只需使用一台机器资源来处理消息。
我发现有些文章称集群只是增加了可靠性和冗余,以防止邮件丢失。
但我想要的是通过添加更多机器来增加整个RabbitMQ群集的吞吐量(进出)。
如何配置RabbitMQ群集以提高吞吐量?
感谢任何评论。
-
PS。我需要在这里添加更多信息。
在我的系统限制i测试中,可以在4个机器集群系统中接收7000 / s消息并输出1700 / s消息,但是不启用HA并且只将1个交换绑定到1个队列并且队列只绑定到1个节点。我猜1队列绑定到1个节点是吞吐量瓶颈。现在很难改变路由密钥,所以我们只有一个路由密钥,并希望将消息分发到不同的节点,以提高整个系统的吞吐量。
下面是我的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 }
答案 0 :(得分:3)
您需要添加更多队列。我猜你只使用一个队列。换句话说,你绑定了一个erlang进程。你想要的是使用多个队列:
这是一个快速而又脏的示例,如何添加一些逻辑来使用logstash将消息发送到不同的队列:
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"] }
}
}
然后在你的输出中:
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
}
看看这个人拥有的存储库: https://github.com/simonmacmullen
我想你会对这个感兴趣: https://github.com/simonmacmullen/random-exchange
This exchange type is for load-balancing among consumers.