elasticsearch 为什么我的默认RabbitMQ配置具有如此低的吞吐量? 出身背景,elasticsearch,rabbitmq,logstash,kibana,elasticsearch,Rabbitmq,Logstash,Kibana" /> elasticsearch 为什么我的默认RabbitMQ配置具有如此低的吞吐量? 出身背景,elasticsearch,rabbitmq,logstash,kibana,elasticsearch,Rabbitmq,Logstash,Kibana" />

elasticsearch 为什么我的默认RabbitMQ配置具有如此低的吞吐量? 出身背景

elasticsearch 为什么我的默认RabbitMQ配置具有如此低的吞吐量? 出身背景,elasticsearch,rabbitmq,logstash,kibana,elasticsearch,Rabbitmq,Logstash,Kibana,我正在使用RabbitMQ作为代理建立一个用于实时日志分析的数据库。我正在使用名为的python项目将日志文件发送到RabbitMQ。需要注意的是: 使用exchange\u类型:直接 使用队列:1不确定这是否值得一提 使用exchange_耐用:1不确定这是否值得一提 兔子 我从他们的网站下载了最新的RabbitMQ,并使用RabbitMQ.config文件运行它。我在配置文件中包含的唯一内容是: tcp_侦听器->{0.0.0.05672} 环回\u用户->[]允许来宾用户远程连接 框架_m

我正在使用RabbitMQ作为代理建立一个用于实时日志分析的数据库。我正在使用名为的python项目将日志文件发送到RabbitMQ。需要注意的是:

使用exchange\u类型:直接 使用队列:1不确定这是否值得一提 使用exchange_耐用:1不确定这是否值得一提 兔子 我从他们的网站下载了最新的RabbitMQ,并使用RabbitMQ.config文件运行它。我在配置文件中包含的唯一内容是:

tcp_侦听器->{0.0.0.05672} 环回\u用户->[]允许来宾用户远程连接 框架_max->2155000解释如下 我正在解析日志文件,日志条目大约是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
    }
}
建议使用此设置

问题 当我启动所有程序时,我意识到我每秒最多只能收到300条左右的消息。生产和消费值均为每秒300条消息。我假设这意味着生产的任何东西都会立即被消耗掉。看看队列,大部分是空的

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


有人能告诉我我的设置有什么问题吗?为什么我使用RabbitMQ时每秒只收到300多条消息,而不是使用Redis时每秒收到3500条消息?

我也使用RabbitMQ,我很容易达到5/7k消息/秒。 我的设置是:

2 rabbitmq server 3.3.1,用于HA复制,群集磁盘模式 日志存储配置:

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”和预回迁计数=>50。 如果队列中有4000 msg和5个线程,则只有两个线程将处理日志:

线程1:2000 msg 线程2:1000 msg 线程3-5:0 此外,我建议检查输入流是否慢:

仅禁用索引器发送日志 ->队列将充满数百万条消息 停用发货人,并重新激活索引器 ->监视它使用消息的速度
为什么需要更改frame_max值?这是一位前RabbitMQ开发人员给出的答案:排队消息的数量在增长吗?@old_听起来不错,我只是更改了它,因为我认为它会增加吞吐量,但它也不起作用。然后我会将其更改回默认值。如何判断排队消息数是否在增长?您可以使用具有HTTP API的管理插件检查队列长度和其他值。禁用确认将导致日志丢失。在处理日志之前,在接收日志后发送ack也会导致日志丢失。这取决于您对日志所做的操作以及日志工作流中的其他步骤它们是否都可靠?。即使使用ack:True,他也应该获得更高的吞吐量。@pagid偶尔丢失日志可能不是一件好事problem@leozilla-没错,但人们应该知道其设置的影响