KahaDB is a file based persistence database that is local to the message broker that is using it. It has been optimised for fast persistence and is the the default storage mechanism from ActiveMQ 5.4 onwards. KahaDB uses less file descriptors and provides faster recovery than its predecessor, the amq message store AMQ Message Store.
Configuration
You can configure ActiveMQ to use KahaDB for its persistence adapter - like below:
Code Block |
<broker brokerName="broker" ... >
<persistenceAdapter>
<kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
</persistenceAdapter>
...
</broker>
|
...
property name |
default value |
Comments |
directory |
activemq-data |
the path to the directory to use to store the message store data and log files |
IndexDirectory |
|
If set, configures where the KahaDB index files will be stored. If not set, the index files are stored in the directory specified by the 'directory' attribute.
Note |
Available as of ActiveMQ 5.10 |
|
indexWriteBatchSize |
1000 |
number of indexes written in a batch |
indexCacheSize |
10000 |
number of index pages cached in memory |
enableIndexWriteAsync |
false |
if set, will asynchronously write indexes |
journalMaxFileLength |
32mb |
a hint to set the maximum size of the message data logs |
enableJournalDiskSyncs |
true |
ensure every non transactional journal write is followed by a disk sync (JMS durability requirement) |
cleanupInterval |
30000 |
time (ms) before checking for a discarding/moving message data logs that are no longer used |
checkpointInterval |
5000 |
time (ms) before checkpointing the journal |
ignoreMissingJournalfiles |
false |
If enabled, will ignore a missing message log file |
checkForCorruptJournalFiles |
false |
If enabled, will check for corrupted Journal files on startup and try and recover them |
checksumJournalFiles |
false true v5.9 |
create a checksum for a journal file - to enable checking for corrupted journals |
archiveDataLogs |
false |
If enabled, will move a message data log to the archive directory instead of deleting it. |
directoryArchive |
null |
Define the directory to move data logs to when they all the messages they contain have been consumed. |
maxAsyncJobs |
10000 |
the maximum number of asynchronous messages that will be queued awaiting storage (should be the same as the number of concurrent MessageProducers) |
concurrentStoreAndDispatchTopics |
false |
enable the dispatching of Topic messages to interested clients to happen concurrently with message storage |
concurrentStoreAndDispatchQueues |
true |
enable the dispatching of Queue messages to interested clients to happen concurrently with message storage |
archiveCorruptedIndex |
false |
If enabled, corrupted indexes found at startup will be archived (not deleted) |
...
Each instance of kahaDB can be configured independently. If no destination is supplied to a filteredKahaDB
, the implicit default value will match any destination, queue or topic. This is a handy catch all. If no matching persistence adapter can be found, destination creation will fail with an exception. The filteredKahaDB
shares its wildcard matching rules with per destination policies Per Destination Policies.
Code Block |
<broker brokerName="broker" ... >
<persistenceAdapter>
<mKahaDB directory="${activemq.base}/data/kahadb">
<filteredPersistenceAdapters>
<!-- match all queues -->
<filteredKahaDB queue=">">
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb"/>
</persistenceAdapter>
</filteredKahaDB>
<!-- match all destinations -->
<filteredKahaDB>
<persistenceAdapter>
<kahaDB enableJournalDiskSyncs="false"/>
</persistenceAdapter>
</filteredKahaDB>
</filteredPersistenceAdapters>
</mKahaDB>
</persistenceAdapter>
...
</broker>
|
...
When the perDestination
boolean attribute is set to true on the catch all (no explicit destination set), filteredKahaDB
. Each matching destination will get its own kahaDB
instance.
Code Block |
<broker brokerName="broker" ... >
<persistenceAdapter>
<mKahaDB directory="${activemq.base}/data/kahadb">
<filteredPersistenceAdapters>
<!-- kahaDB per destinations -->
<filteredKahaDB perDestination="true" >
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb" />
</persistenceAdapter>
</filteredKahaDB>
</filteredPersistenceAdapters>
</mKahaDB>
</persistenceAdapter>
...
</broker>
|