Hello,

We have been using AMQ in production for quite a while some time already,
and we are noticing a strange behavior on one of our queues.

The situation is as follows:

- we do clickstream traffic so when we have identified a user, all his
events are "grouped" by JMSXGroupID property (which is an UUID, in our case,
we can have millions of these per hour) so we have some order in consuming
the events for the same user in case they do burst
- we use KahaDB with kinda the following config:

<mKahaDB directory="${activemq.data}/mkahadb">
    <filteredPersistenceAdapters>
        <filteredKahaDB perDestination="true">
            <persistenceAdapter>
                <kahaDB checkForCorruptJournalFiles="true"
journalDiskSyncStrategy="PERIODIC" journalDiskSyncInterval="5000"
preallocationStrategy="zeros" concurrentStoreAndDispatchQueues="false" />
            </persistenceAdapter>
        </filteredKahaDB>
    </filteredPersistenceAdapters>
</mKahaDB>

- the broker is in a rather beefy EC2 instance, but it doesn't seem to hit
any limits, neither file limits, nor IOPS, nor CPU limits
- destination policy for this destination uses, very similar to a lot other
destinations that use the same grouping for JMSXGroupID:

<policyEntry queue="suchDestination>" producerFlowControl="false"
memoryLimit="256mb" maxPageSize="5000" maxBrowsePageSize="2000">
    <messageGroupMapFactory>
        <simpleMessageGroupMapFactory/>
    </messageGroupMapFactory>
    <deadLetterStrategy>
        <individualDeadLetterStrategy queuePrefix="DLQ."
useQueueForQueueMessages="true" />
    </deadLetterStrategy>
</policyEntry>

- consumers consume messages fairly slowly compared to other destinations
(about 50-100ms per message compared to 
other consumers for other destinations- about 10-30ms per message)

- however, it seems we end up in a situation, where the consumers are not
consuming with the speed we expect them to be doing, and seem to wait for
something, while there is a huge load of messages on the remote broker for
that destination. The consumers seem to also not be neither CPU, nor IO
bound, nor network traffic bound. 

- a symptom is that if we split that queue to two queues and we attach the
same number of consumers in the same number of nodes to consume it, things
are somehow becoming better. Also, if there is a huge workload for that
queue, if we just rename it to suchQueue2 on producers, and assign some
consumers on it, these consumers are much faster (for a while) than the
consumers on the "old" suchQueue.

- the queue doesn't have "non-grouped messages", all messages on it have the
JMSXGroupID property and are of the same type.

- increasing the number of consumers or lowering it for that queue seems to
have little effect

- rebooting the consumer apps seems to have little effect once the queue
becomes "slow to consume"


Has anybody experienced this:

in short:

Broker is waiting a considerable time for the consumers who seem to be free
and not busy all the time.



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html

Reply via email to