为什么我的默认RabbitMQ配置具有如此低的吞吐量?

时间:2014-09-01 15:23:22

标签: elasticsearch rabbitmq logstash kibana

背景

我使用RabbitMQ作为代理设置Elastic Search ELK stack进行实时日志分析。我使用名为Beaver的python项目将我的日志文件发送到RabbitMQ。需要注意的是:

  • 使用exchange_type: "direct"
  • 使用queue_durable: 1(不确定这是否值得一提)
  • 使用exchange_durable: 1(不确定这是否值得一提)

的RabbitMQ

我从他们的网站下载了最新的RabbitMQ并使用rabbitmq.config文件运行它。我在配置文件中包含的唯一内容是:

  • tcp_listeners - > {" 0.0.0.0",5672}
  • loopback_users - > [](允许访客用户远程连接)
  • frame_max - > 2155000 解释如下

我正在解析netscreen个日志文件,日志条目大约是431个字节。我将其乘以5000,因此得到了frame_max值。

在消费者方面(logstash rabbitmq输入插件)我有以下设置:

input {
    rabbitmq {
        host => "rabbitmq server ip here"
        queue => "indexer-queue"
        exchange => "logstash-exchange"
        key => "logstash-routing-key"
        exclusive => false
        durable => true
        auto_delete => false
        type => "logstash-indexer-input"
        prefetch_count => 2000
        threads => 5
    }
}

建议使用此设置here

问题

当我解雇所有内容时,我意识到我每秒最多只能获得300条左右的消息。产品和消费值均为300条/秒。我假设这意味着生产的任何东西都会被立即消耗掉。看着队列,它基本上是空的。

与Redis相比,RabbitMQ在吞吐量方面是可怜的。我听说过关于RabbitMQ的好评,特别是它的速度。

有人可以告诉我我的设置有什么问题吗?为什么我只使用RabbitMQ获得300多条消息/秒而不是使用Redis获得3500条消息/秒

1 个答案:

答案 0 :(得分:-1)

我也在使用rabbitmq,我很容易达到5 / 7k msg /秒。 我的设置是:

  • 2个用于HA(复制)的Rabbitmq服务器3.3.1,集群(磁盘模式)

logstash conf:

rabbitmq {
   exclusive => false
   host => '...'
   password => '...'
   user => '...'
   vhost => 'logstash'
   # No ack will boost your perf
   ack => false   
   # Too high prefetch will slow down
   prefetch_count =>  50
   auto_delete => false
   durable => true
   exchange => "logstash"
   key => 'logstash.logs'

   queue => "logstash.logs"
   threads => 8
}

可能的差异是'ack:false',而prefetch_count => 50。 如果队列中有4000个msg,而5个线程只有两个线程将处理日志:

  • 主题1:2000 msg
  • 主题2:1000 msg
  • 主题3-5:0

此外,我建议检查输入流是否缓慢:

  • 停用索引器(仅限发货日志) - >队列将填充数百万条消息
  • 停用发货人,并重新启动索引器   - >监控消费消息的速度