ActiveMQ 持久化配置之KahaDB Message Store

  ActiveMQ不仅支持persistent和non-persistent两种方式,而其ActiveMQ还支持消息的recovery(恢复)方式。

  消息发送到Queue和Topic的存储原理和结构是不同的,ActiveMQ主要支持以下几种方式:

  · AMQ消息存储-默认的消息存储。

  · KahaDB消息存储-提供了容量的提升和恢复能力。

  · JDBC消息存储-消息基于JDBC存储。

  · Memory消息存储-基于内存的消息存储。

  KahaDB Message Store

  KahaDB是基于文件的持久性数据库,它针对快速持久化做了优化。与AMQ Message Store相比,KahaDB使用的文件描述符更少,且恢复速度更快,KahaDB Message Store提升了容量和恢复能力(5.3及以上版本)。

  KahaDB 配置:

<broker brokerName="broker">
   <persistenceAdapter>
     <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
   </persistenceAdapter>
</broker>

  kahaDB节点属性:

属性名 默认值 注释
archiveCorruptedIndex false 若为true,在启动时发现的损坏索引存档(不删除)。
archiveDataLogs false 若为true,将消息数据日志存档(不删除)。
checkForCorruptJournalFiles false 若为true,在启动时检查损坏的日志文件并尝试修复。
checkpointInterval 5000 检查点的间隔时间(毫秒)。
checksumJournalFiles true 创建日志文件的校验和。在5.9.0版本前,默认为false。
cleanupInterval 30000 清理操作的间隔时间(毫秒)。
compactAcksAfterNoGC 10 5.14.0版本开始,启动确认

  数据结构:
在这里插入图片描述

  KahaDB Message Store的存储结构和AMQ的存储结构类似。包括Cache、BTree Indexes、Redo Log、Data Logs。所有的索引文件都记录在Redo Logs中,这样更新数据时,仅更新存在变化的数据即可。

  KahaDB配置:

<broker brokerName="broker" persistent="true" userShutdownHook=false>
	<persistenceAdapter>
    	<kahaDB directory="activemq-data" journalMaxFileLength="32"/>
    </persistenceAdapter>
    <transportConnectors>
    	<transortConnector uri="tcp://localhost:61616"/>
    </transportConnectors>
</broker>

  kahaDB属性:

属性名 默认值 注释
directory activemq-data 保存消息数据和日志文件的目录。
indexWriteBatchSize 1000 批量写入的索引数。
indexCacheSize 100 内存中缓存的索引页数。
enableIndexWriteAsync false 若为true,索引将异步更新。
journalMaxFileLength 32mb 设置消息数据日志的最大大小的提示。
enableJournalDiskSyncs true 确保每次日志写入后都进行磁盘同步。
maxCheckpointMessageAddSize 4kb 每次事务自动提交前事务中可以把保存的消息数。
cleanupInterval 30000 清理操作的间隔时间(毫秒)。
checkpointInterval 5000 检查点的间隔时间(毫秒)。

  应用场景:

  KahaDB相比与AMQ消息存储能够应用到任何情况下。如果需要应用在broker不超过500个情况下,那么AMQ消息存储是最好的选择。

  需要注意的是,尽管KahaDB消息存储和AMQ消息存储结构十分相似,但依然存在差别,两者之间无法做到无缝切换,如果现在使用的AMQ,需要切换到KahaDB,那么需要移除AMQ。

猜你喜欢

转载自blog.csdn.net/securitit/article/details/106653695
今日推荐