翻译自:http://fusesource.com/docs/broker/5.4/tuning/PersTuning-SerialToDisk.html
KahaDB message store:KahaDB 是ActiveMQ Broker 为了高性能而推荐使用的消息存储机制。KahaDB支持多种性能选项供你进行调整,以获得最优性能。
Normal dispatching through a persistent broker(持久化Broker常规分发):Figure2.1 持久化Broker的常规分发步骤总览
从Producer接收消息后,Broker会按照如下的几个步骤分发消息给消费者:
- Broker把消息存到Message Store中,如果
enableJournalDiskSyncs
为true
,消息会在borker继续处理之前存储到磁盘上。 - 现在Broker发送消息给所有感兴趣的consumers,(但不需要等待Consumer的确认).Topics是立即发送,Queue则是由Broker增加消息到一个目标游标(Cursor)
- Broker给与Producer一个签收反馈。
Concurrent store and dispatch:为了提高Broker的性能,你可以设置concurrent store and dispatch选项,允许存储消息和发送消息给消费者同时进行。
Figure 2.2图表展示了消息存储和分发的并行操作。(原文是2.1,个人感觉有错误)
Figure 2.2. Concurrent Store and Dispatch
从Producer接收消息后,Broker会按照如下的几个步骤分发消息给消费者:
- Broker把消息存到Message Store中,同时,发送消息给所有感兴趣的消费者(consumer),发送完毕后,Broker会给与Producer一个签收反馈,而这个反馈不需要等待消费者的确认或者消息是否已经序列化到磁盘上。
- 一收到所有的消费者反馈后,Broker就把消息从消息存储中移除。consumer的反馈通常会比消息存到到磁盘上快,这就意味着消息存储到磁盘上的步骤会被优化掉。这是因为消息会在存储到磁盘之前就从消息存储中被移除掉了。
Configuring concurrent store and dispatch:concurrent store and dispatch 的特性在Queue和Topic分别由concurrentStoreAndDispatchQueues
和concurrentStoreAndDispatchTopics
进行设置。Queue默认是设置为True,但是Topic则是false,如果需要设置为true,需要参照如下,配置Broker中kahaDB项:
<broker brokerName="broker" persistent="true" useShutdownHook="false">
...
<persistenceAdapter>
<kahaDB directory="activemq-data"
journalMaxFileLength="32mb"
concurrentStoreAndDispatchQueues="true"
concurrentStoreAndDispatchTopics="true"
/>
</persistenceAdapter>
</broker>