【问题标题】:how to recover from message store exhaustion?如何从消息存储耗尽中恢复?
【发布时间】:2012-01-31 17:06:13
【问题描述】:

当一个 activemq 代理被消息淹没或消费者失败时,一旦达到某些(可配置的)限制,它将停止接受消息。在 Broker Networks 中,这种影响可以摧毁整个集群。

我目前正在使用内存限制的默认配置并遇到以下行为:

  1. 消费者失败或变得非常慢(已知问题)
  2. 代理 A(消费者连接的那个)被填满并停止接受消息
  3. 所有其他代理都被填满并停止接受消息
  4. 集群基本宕机

如果消费者现在重新联机,它将尝试重新连接到集群节点之一,但节点不会接受连接,因为这会创建由于代理已满而无法处理的建议消息。

我必须如何配置内存限制,以限制和阻止我的生产目的地,但代理仍将能够接受建议,以便我的消费者可以恢复?

【问题讨论】:

    标签: activemq recovery cluster-computing


    【解决方案1】:

    您应该能够使用producerFlowControl 来减慢生产者的速度,以免让您的经纪人不堪重负。话虽这么说,这是默认启用的,因此您可能已经在使用它...

    我会尝试这样的事情(假设一个 8GB 左右的盒子)...

    • 在任何地方使用failover 传输(代理/客户端连接)
    • 将 JVM 堆增加到 4 GB
    • 大幅增加 systemUsage 限制(memoryUsage 3gb,storeUsage/tempUsage = 10 gb)
    • 对主题和队列启用生产者流控制
      • 将内存限制设置为 2GB 除以主题+队列的总数
      • 换句话说,这应该大大小于 memoryUsage 限制
      • 从生产者流程控制中排除咨询主题(它们可能已经)

    应该限制生产者并为您的系统留出资源来运行/恢复/接受消费者连接...

    【讨论】:

      猜你喜欢
      • 2014-02-05
      • 2012-11-19
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多