elasticsearch 提高多机器上的rabbitmq吞吐量,elasticsearch,rabbitmq,logstash,elasticsearch,Rabbitmq,Logstash" /> elasticsearch 提高多机器上的rabbitmq吞吐量,elasticsearch,rabbitmq,logstash,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

我正在使用logstash和elasticsearch构建一个日志系统。RabbitMQ用于在两个日志堆栈之间对日志消息进行排队

消息路径如下所示:

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.