【问题标题】:Flow control limitting message rate on single queue流控制限制单个队列上的消息速率
【发布时间】:2019-07-23 13:00:29
【问题描述】:

我有一个交换器,只有一个队列绑定到它。当消息发布速率超过某个上限时,rabbitmq 会自动限制传入消息速率。

经过进一步调查,我发现这是由于 rabbitmq 中内置的“流量控制”机制造成的。 https://www.rabbitmq.com/blog/2014/04/14/finding-bottlenecks-with-rabbitmq-3-3/

根据本文档,我有连接,流控制中的通道而不是队列。这意味着存在 cpu-bound/disk-bound 限制。

我的消息不是持久的,所以我没有磁盘限制。在搜索时,我发现说明队列仅限于单个 cpu 的文档。 https://groups.google.com/forum/#!msg/rabbitmq-users/wzHMV7F0ugU/zhW_9b8ACQAJ

这是什么意思? rabbitmq 队列进程是否仅使用 1 个 cpu,即使机器中有多个内核可用? cpu 在队列流控制方面的限制是什么?

【问题讨论】:

    标签: rabbitmq rabbitmq-exchange flow-control


    【解决方案1】:

    队列由一个且只有一个 CPU 处理,这意味着您必须通过具有多个队列的 rabbit 来设计消息流,以保持可扩展性。

    如果您仅在一个队列中,则无论您有 1 个或更多核心,您都将被限制为最大消息数

    https://www.rabbitmq.com/queues.html#runtime-characteristics

    如果您有特殊需要构建只有一个逻辑队列的架构,则明确不推荐;或者如果你有一个非常高流量的队列,你可以在这里查看分片队列:Github Sharded queues Plugin

    这是一个将逻辑队列名称拆分为多个队列的插件(在投入生产之前谨慎使用并测试所有内容,尤其是故障和复制)。

    如果您在 rabbitmq 上运行基准测试,请记住在比服务器上存在的 CPU 内核数量更多的队列上生产和消费。 关于基准测试的其他技巧,尝试只生产、只消费,以及同时使用不同的持久性设置(持久性、消息大小、惰性队列等)和 ack 设置。

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多