【问题标题】:Maximize throughput with RabbitMQ使用 RabbitMQ 最大化吞吐量
【发布时间】:2012-04-05 14:09:43
【问题描述】:

在我们的项目中,我们希望使用“任务队列”模式中的 RabbitMQ 来传递数据。

在生产者端,我们构建了一些 TCP 服务器(在 node.js 中)来接收 高并发数据,不做任何事情就发送给MQ。

在消费者端,我们使用 JAVA 客户端来获取任务数据 MQ,处理一下,然后ack。

所以问题是: 要获得最大的消息传递吞吐量/性能(例如 400,000 msg/秒),最好使用多少个队列?更多的队列是否意味着更好的吞吐量/性能?还有什么我应该注意的吗? 在这种情况下使用 RabbitMQ 的任何已知最佳实践指南?

任何cmets都非常感谢!!

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    为了在 RabbitMQ 中获得最佳性能,请遵循其创建者的建议。来自RabbitMQ blog

    RabbitMQ 的队列为空时最快。当一个队列 空的,它让消费者准备好接收消息,然后尽快 队列接收到一条消息,它直接发送到 消费者。对于持久队列中的持久消息,是的, 它也将进入磁盘,但这是以异步方式完成的,并且 被大量缓冲。主要的一点是很少记账 需要做的,很少修改数据结构,而且非常 几乎不需要分配额外的内存。

    如果你真的想深入挖掘 RabbitMQ 队列的性能,他们的 other blog entry 会更深入地研究数据。

    【讨论】:

    • 那是流处理,不是排队。他们应该将其重命名为“RabbitMS”(兔子消息流)。
    【解决方案2】:

    根据我曾经从 rabbitmq-discuss 邮件组得到的回复,您可以尝试其他一些方法来提高吞吐量并减少延迟:

    • 使用更大的预取计数。小的值会影响性能。

    • 主题交换比直接交换或扇出交换慢。

    • 确保队列保持较短。更长的队列会带来更多的处理 开销。

    • 如果您关心延迟和消息速率,请使用较小的消息。 使用有效的格式(例如避免使用 XML)或压缩有效负载。

    • 使用 HiPE 进行实验,这有助于提高性能。

    • 避免事务和持久性。也避免立即发布 或强制模式。避免 HA。集群也会影响性能。

    • 如果您有 多个队列和消费者。

    • 至少使用 v2.8.1,它引入了流量控制。确保 内存和磁盘空间警报永远不会触发。

    • 虚拟化会带来很小的性能损失。

    • 调整您的操作系统和网络堆栈。确保您提供的足够多 内存。提供快速的内核和 RAM。

    【讨论】:

    • 主题交换是否较慢,因为交换需要更长的时间来计算需要将消息发送到哪个队列?
    • 不幸的是,大量的泛化噪音和对无关建议的影响很小。我很惊讶他们没有将“只发送更少的消息”列为性能提示。如果您需要主题队列,则不能直接使用。增加预取也可以显着增加延迟。您必须按照文档和指南为您的情况设置正确的值。多核系统更快?是的,水是湿的。保持排队时间短?嗯,只是扔掉多余的消息?其中一些只是愚蠢的。在大多数应用中,HiPE 将为您带来几乎零收益。
    【解决方案3】:

    您将通过更大的预取计数来增加吞吐量,并同时确认来自您的消费者的多条消息(而不是为每条消息发送 ACK)。

    但是,当然,带有多个标志的 ACK (http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack) 需要您的消费者应用程序 (http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html) 上的额外逻辑。您必须保留从代理传递的消息的传递标记列表、它们的状态(您的应用程序是否已处理它们)以及当所有传递的消息时每第 N 个传递标记 (NDTAG) 确认一次- 小于或等于 NDTAG 的标签已被处理。

    【讨论】:

    • 对不起,这显然是错误的:“您将通过更大的预取计数来增加吞吐量”。预取需要调整,即使那样它也不是一个常数。文档对此进行了详细说明。
    • @RickO'Shea 请仔细阅读问题和答案,然后添加评论。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多