提高RabbitMQ吞吐量

时间:2015-08-16 17:26:11

标签: rabbitmq celery

我正在使用RabbitMQ和Celery进行项目,但我已经遇到了瓶颈。

我的架构如下:

  • 1 RabbitMQ节点
  • 1至7个节点,将通过Celery从RabbitMQ读取

我开始进行一些性能测量,并通过预先填充带有200k消息的Rabbit,节点执行大约600msg /秒。

使用相同的预填充队列启动两个节点,两个节点的速度都不到600msg /秒。

使用相同的方案添加更多节点会导致吞吐量大幅下降,7个节点的速度低于400毫秒/秒。

我已经开始添加一些设置(有些甚至来自RabbitMQ网站),但它没有带来改进。

我当前的设置配置是

[   {kernel, [
    {inet_default_connect_options, [{nodelay, true}]},
    {inet_default_listen_options,  [{nodelay, true}]}   ]},   {rabbit, [
    {tcp_listeners,[{"0.0.0.0", 5672}]},

    {vm_memory_high_watermark, 0.6},

    {tcp_listen_options, [binary,
                          {packet, raw},
                          {reuseaddr, true},
                          {backlog, 128},
                          {nodelay, true},
                          {exit_on_close, false},
                          {keepalive, true},
                          {sndbuf, 32768},
                          {recbuf,32768}
                          ]}   ]} ].

我一直在阅读用户的博客和帖子,他们提到了比我实现的更大的吞吐量。提到100k / sec,而我几乎没有达到2.8k / sec。

关于如何提高吞吐量的任何想法?

2 个答案:

答案 0 :(得分:0)

通过在celeryconfig.py中设置以下内容,尝试使用transient queues

CELERY_DEFAULT_DELIVERY_MODE = 'transient'

这可以防止RabbitMQ保存到磁盘,从而提高吞吐量

此外,如果您使用RabbitMQ作为结果后端,您可能会通过切换到Redis获得更好的性能。

答案 1 :(得分:0)

我的解决方案是为每个消费者设一个单独的队列。