KahaDB 支持多种机制在系统异常关闭后重启并恢复。包括检测数据文件丢失和还原损坏的metadata。这些特性并不能完全保证系统异常关闭不造成消息丢失。如果需要保证系统的高可靠性,建议部署到容灾系统上。例如RAID磁盘阵列中。
当broker正常关闭时, KahaDB message store会将所有的缓存数据刷到文件系统中。尤其是这些数据:
1、所有未处理的日志数据
2、所有缓存的metadata
最后meta store中的信息与journal数据文件中的数据保持一致性。
正常情况下,在系统恢复时优先读取journal中的数据。因为metacache中的索引信息是周期性的更新到meta store中的。当系统异常关闭时,可能journal中有的数据meta store中并没有不存在索引。但是KahaDB在恢复时会先读取meta store中的数据,然后再读取journal有但是meta store不存在的数据(因为KahaDB根据meta store中的索引信息快速定位到metastore没有但是journal文件中包含的数据,然后根据这些数据重新在meta store中建立索引信息)
KahaDB会在更新metadata store之前,保存更新操作的概要信息到重做日志(db.redo)中。减少系统异常关闭时的风险。因为重做日志非常小,所以在系统异常关闭时能快速写入。当系统恢复时会判断重做日志中的信息是否需要更新到metadata中。
如果 metadata store 已被不可挽回的损坏了,可以删除metadata store文件(db.data)来强制恢复;只不过这个时候,broker会读取所有的journal文件来重建metadata store,需要一段比较长的时间。
KahaDB可以检测是否有journal文件丢失,如果有丢失,默认将会抛出一个异常然后关闭。便于管理员调查丢失的journal文件,并手动还原。可以通过设置ignoreMissingJournalfiles为true,让broker在启动时忽略这些丢失的journal文件。
KahaDB同样可以检测journal文件的完整性。不过这些特性需要明确的配置来启用。
<persistenceAdapter>
<kahaDB directory="activemq-data"
journalMaxFileLength="32mb"
checksumJournalFiles="true"
checkForCorruptJournalFiles="true"
/>
</persistenceAdapter>
KahaDB的各个可配置属性:
属性 | 默认值 | 描述 |
directory | activemq-data | 保存message store数据文件的目录 |
indexWriteBatchSize | 1000 | 批量更新索引的阀值,当要更新的索引到达这个索引时,批量更新到metadata store中 |
indexCacheSize | 10000 | 指定metadata cache的大小 |
enableIndexWriteAsync | false | 写入索引文件到metadata store中的方式是否采用异步写入 |
journalMaxFileLength | 32mb | 消息持久数据文件的大小 |
enableJournalDiskSyncs | true | 如果为true,保证使用同步写入的方式持久化消息到journal文件中 |
cleanupInterval | 30000 | 清除(清除或归档)不再使用的journal 文件的时间周期(毫秒)。 |
checkpointInterval | 5000 | 写入索引信息到metadata store中的时间周期(毫秒) |
ignoreMissingJournalfiles | false | 是否忽略丢失的journal文件。如果为false,当丢失了journal文件时,broker启动时会抛异常并关闭 |
checkForCorruptJournalFiles | false | 如果为true,broker在启动的时候会检测journal文件是否损坏,若损坏便尝试恢复它。 |
checksumJournalFiles | false | 如果为true。KahaDB为journal文件生产一个checksum,以便能够检测journal文件是否损坏。 |
archiveDataLogs | false | 如果为true,当达到cleanupInterval周期时,会归档journal文件而不是删除 |
directoryArchive | null | 指定归档journal文件存放的路径 |
databaseLockedWaitDelay | 10000 | 在使用主从数据库备份时,等待获取DB上的lock的延迟时间。 |
maxAsyncJobs | 10000 | 等待写入journal文件的任务队列的最大数量。应该大于或等于最大并发producer的数量。配合并行存储转发属性使用。 |
concurrentStoreAndDispatchTransactions | false | 如果为true,转发消息的时候同时提交事务 |
concurrentStoreAndDispatchTopics | false | 如果为true,转发Topic消息的时候同时存储消息的message store中。 |
concurrentStoreAndDispatchQueues | true | 如果为true,转发Queue消息的时候同时存储消息到message store中。 |
分享到:
相关推荐
Apache ActiveMQ是业界广泛使用的开源消息中间件,它支持多种协议,如AMQP、STOMP、MQTT等,且提供了消息持久化功能,确保在系统故障后仍能恢复消息,保持数据完整性。本主题主要围绕“activemq消息持久化所需Jar包...
深入研究源代码,你将能发现ActiveMQ如何处理事务、保证消息顺序、实现消息的可靠传递以及故障恢复机制。此外,还可以学习到如何利用它的网络集群功能来构建高可用的消息系统。 对于开发者来说,理解ActiveMQ 5.7的...
9. **管理界面**:ActiveMQ提供了一个Web管理界面,允许用户监控和管理消息代理,包括查看队列状态、日志和配置等。 10. **故障恢复与高可用性**:ActiveMQ支持主备切换和复制,确保在单个节点失败时,服务能够继续...
- **KahaDB的恢复机制**:当Broker重启时,KahaDB能够快速恢复未完成的事务,确保消息不会丢失。 #### 三、消息队列(Queue)实现分析 ActiveMQ中消息队列的实现是基于内存和磁盘的混合模式,既能提供高吞吐量又能...
4. **持久化机制**:ActiveMQ使用KahaDB作为默认的持久化存储,源码中可以查看消息如何被持久化,以及在系统重启后如何恢复状态。 5. **集群与高可用性**:ActiveMQ支持集群模式,通过源码可以学习到如何配置和管理...
5. **KahaDB Store**:`activemq-kahadb-store-5.9.1.jar`包含了ActiveMQ的KahaDB存储引擎,这是一种持久化机制,用于在内存中缓存消息并将其写入磁盘,确保即使在服务器故障后也能恢复消息。 6. **Log4j**:`log4j...
2. **持久化机制**:ActiveMQ使用KahaDB作为默认的持久化存储,确保即使在服务器崩溃或重启后,消息也能被正确恢复。 3. **网络连接**:ActiveMQ支持网络集群,允许多台服务器之间的消息共享和负载均衡,提供高可用...
在实际应用中,使用MySQL作为ActiveMQ的持久化存储可以带来诸多好处,例如利用数据库的备份和恢复机制,提高系统的整体可靠性和可扩展性。但是,这也意味着需要考虑数据库性能和容量规划,因为ActiveMQ的所有消息...
4. **持久化**:ActiveMQ提供了多种持久化选项,包括基于文件的KahaDB、LevelDB以及JDBC数据库,确保在服务重启后仍能恢复消息。 5. **高可用性**:通过集群和复制技术,ActiveMQ可以创建高可用的消息服务,确保...
Apache ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它基于Java Message Service(JMS)规范,用于在分布式系统中实现可靠的消息传递。这个2018年的最新版,即Apache ActiveMQ 5.14.4,包含了该中间件的...
同时,ActiveMQ的事务处理和消息确认机制确保了消息传递的可靠性。 总之,Windows版ActiveMQ是一个强大的消息中间件,适用于Windows环境,提供高效、可靠的异步通信解决方案,广泛应用于微服务架构、大数据处理和...
Apache ActiveMQ是开源的Java消息服务(JMS)提供商,被广泛用于企业级的消息传递系统。...通过不断地学习和实践,你可以利用ActiveMQ实现更复杂的消息传递场景,如分布式系统中的异步处理、解耦和错误恢复。
它还支持多种数据持久化机制,包括KahaDB、JDBC以及LevelDB,确保即使在服务器故障后也能恢复消息。 **2. Java消息服务(JMS)** JMS是Java平台上的一个API,用于在分布式环境中发送、接收和管理消息。ActiveMQ作为...
- **KahaDB**:这是默认的持久化机制,提供高效的数据存储和恢复。 - **JDBC**:ActiveMQ也支持使用数据库进行持久化,这适用于大规模部署和高可用性需求。 - **File System**:另一种选项是直接将消息存储在文件...
5. **activemq-kahadb-store-5.8.0.jar**:KahaDB是ActiveMQ的一种持久化存储机制,用于在磁盘上存储和检索消息,确保在系统故障后仍能恢复消息。 6. **log4j-1.2.17.jar**:这是一个日志记录库,用于收集和处理...
- **持久化**:ActiveMQ 5.9支持多种持久化机制,如KahaDB、LevelDB和JDBC,确保即使在服务器宕机后也能恢复消息。 - **网络集群**:通过网络集群,多个ActiveMQ实例可以共享负载和提供高可用性,当一个节点故障时...
10. **持久化机制**:支持KahaDB和LevelDB两种持久化引擎,保证在系统重启后能够恢复消息队列的状态。 在实际应用中,Apache ActiveMQ 5.8可以应用于各种场景,如微服务之间的通信、大数据流处理、事件驱动架构等。...
其中,"Journal"通常指的是高速日志(Fast Journal),这是一个高效的数据记录和恢复机制。`activemq-store-journal-1.4.jar`正是实现了这一机制,它负责快速写入消息到磁盘并提供高可用性。这种存储策略使得...
3. **持久化机制**:消息持久化确保在系统故障后仍能恢复未处理的消息,ActiveMQ使用基于KahaDB的日志存储实现这一点。 4. **高可用性**:通过网络集群和故障转移,ActiveMQ可以构建高可用的消息服务,确保无中断...
3. **消息持久化**:ActiveMQ提供了多种持久化选项,包括本地文件系统、数据库(如JDBC)以及基于KahaDB的内置存储,确保即使在服务器重启后也能恢复消息。 4. **主题与队列**:ActiveMQ支持发布/订阅(Topic)和点...