我使用RabbitMQ作为代理设置Elastic Search ELK stack进行实时日志分析。我使用名为Beaver的python项目将我的日志文件发送到RabbitMQ。需要注意的是:
exchange_type: "direct"
queue_durable: 1
(不确定这是否值得一提)exchange_durable: 1
(不确定这是否值得一提)我从他们的网站下载了最新的RabbitMQ并使用rabbitmq.config
文件运行它。我在配置文件中包含的唯一内容是:
我正在解析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条消息/秒
答案 0 :(得分:-1)
我也在使用rabbitmq,我很容易达到5 / 7k msg /秒。 我的设置是:
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个线程只有两个线程将处理日志:
此外,我建议检查输入流是否缓慢: