elasticsearch 提高多机器上的rabbitmq吞吐量
我正在使用logstash和elasticsearch构建一个日志系统。RabbitMQ用于在两个日志堆栈之间对日志消息进行排队 消息路径如下所示:elasticsearch 提高多机器上的rabbitmq吞吐量,elasticsearch,rabbitmq,logstash,elasticsearch,Rabbitmq,Logstash,我正在使用logstash和elasticsearch构建一个日志系统。RabbitMQ用于在两个日志堆栈之间对日志消息进行排队 消息路径如下所示: source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch 但我发现,无论我向rabbitMQ添加了多少机器,它都只使用一个机器资源来处理消息 我发现一些文章说集群只是增加了可靠性和冗余以防止消息丢失 但我想要的是通过添加更多机器来增加整个R
source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch
但我发现,无论我向rabbitMQ添加了多少机器,它都只使用一个机器资源来处理消息
我发现一些文章说集群只是增加了可靠性和冗余以防止消息丢失
但我想要的是通过添加更多机器来增加整个RabbitMQ集群的吞吐量(输入和输出)
如何配置RabbitMQ集群以提高it吞吐量
如有任何意见,我们将不胜感激
--
另外,我需要在这里添加更多信息
在我的系统限制中,我测试的是,在4机集群系统中可以接收7000/s消息,输出1700/s消息,但不启用HA,只将1个交换绑定到1个队列,队列只绑定到1个节点。我猜1个队列绑定到1个节点是吞吐量瓶颈。而且现在很难更改路由密钥,因此我们只有一个路由密钥,希望将消息分发到不同的节点以提高整个系统的吞吐量
下面是我的日志存储索引器配置
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 }
您需要添加更多队列。我猜你只用一个队列。换句话说,您绑定到一个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
}
更新:
看看这家伙拥有的存储库:
我想你会对这个感兴趣:
谢谢@Vor。但有没有办法用一个队列将消息分发到节点(而不是副本)?一致散列交换是否有助于做到这一点?谢谢@Vor。这正是我想要的。但是现在遇到了另一个问题。
This exchange type is for load-balancing among consumers.