`
berdy
  • 浏览: 514214 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activemq中的KahaDB消息日志的恢复机制

    博客分类:
  • JMS
阅读更多
    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的各个可配置属性:
属性默认值描述
directoryactivemq-data保存message store数据文件的目录
indexWriteBatchSize1000批量更新索引的阀值,当要更新的索引到达这个索引时,批量更新到metadata store中
indexCacheSize10000指定metadata cache的大小
enableIndexWriteAsyncfalse写入索引文件到metadata store中的方式是否采用异步写入
journalMaxFileLength32mb消息持久数据文件的大小
enableJournalDiskSyncstrue如果为true,保证使用同步写入的方式持久化消息到journal文件中
cleanupInterval30000清除(清除或归档)不再使用的journal 文件的时间周期(毫秒)。
checkpointInterval5000写入索引信息到metadata store中的时间周期(毫秒)
ignoreMissingJournalfilesfalse是否忽略丢失的journal文件。如果为false,当丢失了journal文件时,broker启动时会抛异常并关闭
checkForCorruptJournalFilesfalse如果为true,broker在启动的时候会检测journal文件是否损坏,若损坏便尝试恢复它。
checksumJournalFilesfalse如果为true。KahaDB为journal文件生产一个checksum,以便能够检测journal文件是否损坏。
archiveDataLogsfalse如果为true,当达到cleanupInterval周期时,会归档journal文件而不是删除
directoryArchivenull指定归档journal文件存放的路径
databaseLockedWaitDelay10000在使用主从数据库备份时,等待获取DB上的lock的延迟时间。
maxAsyncJobs10000等待写入journal文件的任务队列的最大数量。应该大于或等于最大并发producer的数量。配合并行存储转发属性使用。
concurrentStoreAndDispatchTransactionsfalse如果为true,转发消息的时候同时提交事务
concurrentStoreAndDispatchTopicsfalse如果为true,转发Topic消息的时候同时存储消息的message store中。
concurrentStoreAndDispatchQueuestrue如果为true,转发Queue消息的时候同时存储消息到message store中。


3
0
分享到:
评论
1 楼 DEMONU 2015-05-13  
能详细讲讲代码实现就更好了

相关推荐

    activemq消息持久化所需Jar包

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它支持多种协议,如AMQP、STOMP、MQTT等,且提供了消息持久化功能,确保在系统故障后仍能恢复消息,保持数据完整性。本主题主要围绕“activemq消息持久化所需Jar包...

    activemq 5.7 官方源代码

    深入研究源代码,你将能发现ActiveMQ如何处理事务、保证消息顺序、实现消息的可靠传递以及故障恢复机制。此外,还可以学习到如何利用它的网络集群功能来构建高可用的消息系统。 对于开发者来说,理解ActiveMQ 5.7的...

    ActiveMQ源码,demo,安全机制

    9. **管理界面**:ActiveMQ提供了一个Web管理界面,允许用户监控和管理消息代理,包括查看队列状态、日志和配置等。 10. **故障恢复与高可用性**:ActiveMQ支持主备切换和复制,确保在单个节点失败时,服务能够继续...

    activeMQ 源码分析

    - **KahaDB的恢复机制**:当Broker重启时,KahaDB能够快速恢复未完成的事务,确保消息不会丢失。 #### 三、消息队列(Queue)实现分析 ActiveMQ中消息队列的实现是基于内存和磁盘的混合模式,既能提供高吞吐量又能...

    ActiveMQ 5.7源码及jar包

    4. **持久化机制**:ActiveMQ使用KahaDB作为默认的持久化存储,源码中可以查看消息如何被持久化,以及在系统重启后如何恢复状态。 5. **集群与高可用性**:ActiveMQ支持集群模式,通过源码可以学习到如何配置和管理...

    activemq-rar-5.9.1.rar

    5. **KahaDB Store**:`activemq-kahadb-store-5.9.1.jar`包含了ActiveMQ的KahaDB存储引擎,这是一种持久化机制,用于在内存中缓存消息并将其写入磁盘,确保即使在服务器故障后也能恢复消息。 6. **Log4j**:`log4j...

    apache-activemq-5.2.0-bin.zip

    2. **持久化机制**:ActiveMQ使用KahaDB作为默认的持久化存储,确保即使在服务器崩溃或重启后,消息也能被正确恢复。 3. **网络连接**:ActiveMQ支持网络集群,允许多台服务器之间的消息共享和负载均衡,提供高可用...

    activemq-5.15+mysqljdbc配置.zip

    在实际应用中,使用MySQL作为ActiveMQ的持久化存储可以带来诸多好处,例如利用数据库的备份和恢复机制,提高系统的整体可靠性和可扩展性。但是,这也意味着需要考虑数据库性能和容量规划,因为ActiveMQ的所有消息...

    apache-activemq-5.9.0-bin

    4. **持久化**:ActiveMQ提供了多种持久化选项,包括基于文件的KahaDB、LevelDB以及JDBC数据库,确保在服务重启后仍能恢复消息。 5. **高可用性**:通过集群和复制技术,ActiveMQ可以创建高可用的消息服务,确保...

    activemq(2018最新版)

    Apache ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它基于Java Message Service(JMS)规范,用于在分布式系统中实现可靠的消息传递。这个2018年的最新版,即Apache ActiveMQ 5.14.4,包含了该中间件的...

    Windows版ActiveMq

    同时,ActiveMQ的事务处理和消息确认机制确保了消息传递的可靠性。 总之,Windows版ActiveMQ是一个强大的消息中间件,适用于Windows环境,提供高效、可靠的异步通信解决方案,广泛应用于微服务架构、大数据处理和...

    apache-activemq-5.14.3-bin.zip

    Apache ActiveMQ是开源的Java消息服务(JMS)提供商,被广泛用于企业级的消息传递系统。...通过不断地学习和实践,你可以利用ActiveMQ实现更复杂的消息传递场景,如分布式系统中的异步处理、解耦和错误恢复。

    ActiveMQ手册 - 开发文档

    它还支持多种数据持久化机制,包括KahaDB、JDBC以及LevelDB,确保即使在服务器故障后也能恢复消息。 **2. Java消息服务(JMS)** JMS是Java平台上的一个API,用于在分布式环境中发送、接收和管理消息。ActiveMQ作为...

    activemq5配置文档

    - **KahaDB**:这是默认的持久化机制,提供高效的数据存储和恢复。 - **JDBC**:ActiveMQ也支持使用数据库进行持久化,这适用于大规模部署和高可用性需求。 - **File System**:另一种选项是直接将消息存储在文件...

    activemq-rar-5.8.0.rar

    5. **activemq-kahadb-store-5.8.0.jar**:KahaDB是ActiveMQ的一种持久化存储机制,用于在磁盘上存储和检索消息,确保在系统故障后仍能恢复消息。 6. **log4j-1.2.17.jar**:这是一个日志记录库,用于收集和处理...

    activeMQ5.9(jar).rar

    - **持久化**:ActiveMQ 5.9支持多种持久化机制,如KahaDB、LevelDB和JDBC,确保即使在服务器宕机后也能恢复消息。 - **网络集群**:通过网络集群,多个ActiveMQ实例可以共享负载和提供高可用性,当一个节点故障时...

    Apache ActiveMQ5.8

    10. **持久化机制**:支持KahaDB和LevelDB两种持久化引擎,保证在系统重启后能够恢复消息队列的状态。 在实际应用中,Apache ActiveMQ 5.8可以应用于各种场景,如微服务之间的通信、大数据流处理、事件驱动架构等。...

    activemq-store-journal-1.4.jar.zip

    其中,"Journal"通常指的是高速日志(Fast Journal),这是一个高效的数据记录和恢复机制。`activemq-store-journal-1.4.jar`正是实现了这一机制,它负责快速写入消息到磁盘并提供高可用性。这种存储策略使得...

    activemq的包

    3. **持久化机制**:消息持久化确保在系统故障后仍能恢复未处理的消息,ActiveMQ使用基于KahaDB的日志存储实现这一点。 4. **高可用性**:通过网络集群和故障转移,ActiveMQ可以构建高可用的消息服务,确保无中断...

    apache-activemq

    3. **消息持久化**:ActiveMQ提供了多种持久化选项,包括本地文件系统、数据库(如JDBC)以及基于KahaDB的内置存储,确保即使在服务器重启后也能恢复消息。 4. **主题与队列**:ActiveMQ支持发布/订阅(Topic)和点...

Global site tag (gtag.js) - Google Analytics