ActiveMQ队列上的奇怪行为
我们在生产中使用AMQ已经有一段时间了,我们注意到一个队列中出现了一种奇怪的行为 情况如下:ActiveMQ队列上的奇怪行为,activemq,Activemq,我们在生产中使用AMQ已经有一段时间了,我们注意到一个队列中出现了一种奇怪的行为 情况如下: 我们使用clickstream流量,因此当我们识别出一个用户时,他的所有事件都会根据JMSXGroupID属性(在我们的例子中,这是一个UUID,我们每小时可以有数百万个)进行“分组”,因此我们有一定的顺序来使用同一用户的事件,以防它们发生突发 我们将KahaDB与以下配置一起使用: <mKahaDB directory="${activemq.data}/mkahadb"> <fi
- 我们使用clickstream流量,因此当我们识别出一个用户时,他的所有事件都会根据JMSXGroupID属性(在我们的例子中,这是一个UUID,我们每小时可以有数百万个)进行“分组”,因此我们有一定的顺序来使用同一用户的事件,以防它们发生突发
- 我们将KahaDB与以下配置一起使用:
<mKahaDB directory="${activemq.data}/mkahadb"> <filteredPersistenceAdapters> <filteredKahaDB perDestination="true"> <persistenceAdapter> <kahaDB checkForCorruptJournalFiles="true" journalDiskSyncStrategy="PERIODIC" journalDiskSyncInterval="5000" preallocationStrategy="zeros" concurrentStoreAndDispatchQueues="false" /> </persistenceAdapter> </filteredKahaDB> </filteredPersistenceAdapters>
- 代理处于一个相当强大的EC2实例中,但它似乎没有达到任何限制,既没有文件限制,也没有IOPS限制,也没有CPU限制
- 此目的地的目的地策略使用,非常类似于对JMSXGroupID使用相同分组的许多其他目的地:
<policyEntry queue="suchDestination>" producerFlowControl="false" memoryLimit="256mb" maxPageSize="5000" maxBrowsePageSize="2000"> <messageGroupMapFactory> <simpleMessageGroupMapFactory/> </messageGroupMapFactory> <deadLetterStrategy> <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" /> </deadLetterStrategy>
- 与其他目的地相比,消费者使用消息的速度相当慢(与其他目的地相比,每条消息大约50-100ms) 其他目的地的其他用户(每条消息约10-30毫秒)
- 然而,似乎我们最终会遇到这样一种情况:消费者并没有以我们期望的速度消费,并且似乎在等待某件事情,而远程代理上有大量用于该目的地的消息。消费者似乎既不是CPU,也不是IO绑定,也不是网络流量绑定
- 一个症状是,如果我们将该队列拆分为两个队列,并在相同数量的节点中附加相同数量的使用者来使用它,那么情况会以某种方式变得更好。此外,如果该队列的工作负载很大,如果我们只是在生产者上将其重命名为suchQueue2,并在其上分配一些消费者,那么这些消费者比“旧”suchQueue上的消费者要快得多(暂时)
- 队列没有“非分组消息”,队列上的所有消息都具有JMSXGroupID属性,并且类型相同
- 增加或降低该队列的消费者数量似乎没有什么效果
- 一旦队列变得“消费缓慢”,重新启动消费者应用程序似乎没有什么效果
经纪人等待消费者的时间相当长,他们似乎一直都很空闲,并不忙碌。我也遇到了同样的问题。你找到答案了吗?