`
netcomm
  • 浏览: 141587 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

activeMQ 的kahadb存储引擎分析

 
阅读更多

很久没更新blog了,前几天看到淘宝开源了Meta,估计notify也要开源了。其实消息中间件的一个非常重要的核心部件就是持久化存储,可能Meta的功能定位使得它在这一块的实现相对notify和activemq就简单些。趁着有点时间,把activeMQ的kahadb存储引擎做了个分析,希望能对jms实现感兴趣的朋友有点帮助。
1. 概述
Kahadb是activemq从版本5.4之后的默认消息存储引擎。消息存储机制是消息中间件最重要的核心部件和性能提升点。一直想对它做一个完整分析,这次趁有时间对kahadb做一个较完整分析。
Kahadb是基于B-tree算法的,具体原理fusesource给了个原理说明(http://fusesource.com/docs/broker/5.4/persistence/KahaDB-Overview.html),下面我们从代码实现角度进行一个较深入的分析。下面所有的分析都是基于activeMQ 5.4.3版本源码,该版本里的kahadb版本是V3,且是基于queue进行的源码分析,topic的实现虽然有不少差异,但整体可参考queue的。

2. 每个磁盘文件的作用和详细存储格式
首先kahadb在消息保存目录中只有4类文件和一个lock,跟ActiveMQ的其他几种文件存储引擎相比这就非常简洁了。
每种文件的具体作用:
#db-*.log:
存放完整的每条消息(包括事务、目的地、id、优先级、具体内容等)和producerSequenceIdTracker(用来验证每个消息生成者发送的消息是否重复的数据结构)。它随着消息数量的增多,如每32M一个文件,文件名按照数字进行编号,如db-1.log、db-2.log、db-3.log …

#db.data
通过存放多个Btree数据结构来保存各类重要信息,下面一一进行介绍:
 Metadata类的destinations:用来保存该broker上有哪些Queue或队列
 StoredDestination类的orderIndex属性中的
defaultPriorityIndex、lowPriorityIndex、highPriorityIndex,这3个btree是为消息优先级排序而设计的(应该是版本5.4引入的,唉,有时候一个功能的引入带来的代价可能比较大)。它们的主要作用是为AbstractStoreCursor类的doFillBatch方法服务的,也就是常说的消息指针(message cursors)。当消息指针需要从磁盘文件中装载一批消息的时候会使用这3个btree实例(kahadb版本小于2的不支持lowPriorityIndex、highPriorityIndex)
 StoredDestination类的locationIndex:该btree的主要作用包括:
. 系统重启进行恢复操作的时候,要移除掉不在db-*.log文件里的消息;
. 在系统进行定时checkpointUpdate时使用
 StoredDestination类的messageIdIndex:该btree的主要作用是消息确认acknowledge操作时,通过消息ID在messageIdIndex中删除对应的记录,并依据返回的值删除orderIndex和locationIndex中的记录
上面这些就是kahadb中最主用的btree实例。

#db.redo
它的作用是“Double Write”,具体代码参看PageFile类的writeBatch方法。它的原理可参考(http://www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/)

#db.free
当前db.data文件里哪些页面是空闲的,文件具体内容是所有空闲页的ID

下面是具体每个文件的内部数据格式:




  • 大小: 18.4 KB
  • 大小: 15.9 KB
  • 大小: 8.1 KB
分享到:
评论
1 楼 DEMONU 2015-05-13  
擦,这样就完了啊

相关推荐

    基于kahadb的activemq高可用集群部署配置示例

    本示例将详细讲解如何基于KahaDB存储引擎构建ActiveMQ的高可用集群。 KahaDB是ActiveMQ的一个持久化存储机制,它提供了快速、可扩展和可靠的存储解决方案。在高可用集群中,KahaDB确保即使在broker故障时,消息也...

    ActiveMQ开发规范及方案

    jdbc持久化方式是指使用jdbc连接池来保存消息,而kahadb持久化方式是指使用kahadb存储引擎来保存消息。 ActiveMQ 事务 事务是指ActiveMQ对消息的事务处理,即ActiveMQ将多个消息作为一个事务来处理。ActiveMQ提供...

    ActiveMQ实践入门指南_ActiveMQ实践入门指南_源码

    2. 数据复制:利用Kahadb存储引擎的数据复制功能,保证数据一致。 十、常见问题与解决 1. 消息丢失:检查持久化设置、网络连接和消费者配置。 2. 性能瓶颈:分析日志,定位CPU、内存或网络问题。 3. 安全问题:定期...

    ActiveMQ的文档.rar

    4. **持久化**:ActiveMQ提供了强大的持久化机制,确保即使在服务器重启后,消息也能被正确处理,这得益于其使用了高效的KahaDB存储引擎。 5. **高可用性**:通过集群和故障转移,ActiveMQ能够实现高可用性,确保...

    activemq消息持久化所需Jar包

    4. **KahaDB存储引擎**:这是ActiveMQ内置的默认持久化存储,不需要额外的数据库。KahaDB是一个轻量级、高效的日志文件系统,提供消息持久化。`kahaDB-store.jar` 是与KahaDB相关的库。 5. **OpenJPA**:OpenJPA是...

    linux 下apache-activemq.zip

    默认情况下,ActiveMQ使用KahaDB存储引擎,但也可以选择其他选项如LevelDB或JDBC。 总的来说,Apache ActiveMQ在Linux环境中的部署和管理涉及到多个方面,包括安装、配置、安全性、性能优化和故障处理。理解这些...

    kahadb详解

    Kahadb 是 ActiveMQ 从版本 5.4 之后的默认消息存储引擎。消息存储机制是消息中间件最重要的核心部件和性能提升点。Kahadb 的索引是 B+ 树,而其最基础的存储机制则是基于“随机存储文件”设计的。 Kahadb 中磁盘...

    apache-activemq-5.15.4-bin

    它使用KahaDB存储引擎来保存消息,确保高可用性和可靠性。 3. **多种协议支持**:除了JMS,ActiveMQ还支持多种网络协议,包括OpenWire、STOMP、AMQP、MQTT和WS(WebSocket),这些协议使得ActiveMQ能够与多种编程...

    activemq-rar-5.9.1.rar

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

    activemq学习心得.docx

    这段代码配置了activemq的持久化adapter,使用kahaDB作为存储引擎,存储目录为${activemq.base}/data/kahadb,journalMaxFileLength为50mb。 三、系统使用量 系统使用量是activemq中用于控制消息生产者流控的机制...

    activemq5.9源码

    - **KahaDB**:ActiveMQ 5.9默认使用KahaDB作为持久化存储,它是一种高效的日志存储引擎,可以在`org.apache.activemq.store.kahadb`中找到相关代码。 - **JDBC Store**:对于大型部署,可以选择使用JDBC存储,...

    apache-activemq-5.13.3

    此外,还可以通过使用更高效的存储引擎,如KahaDB,提高消息的存储和检索速度。 9. **API和库支持**:ActiveMQ提供了丰富的客户端库,包括Java、C++、Python、.NET等多种语言,方便开发者在不同环境中使用。 10. *...

    activemq-rar-5.10.0.rar

    5. **activemq-kahadb-store-5.10.0.jar**:KahaDB是ActiveMQ的一种持久化存储引擎,用于在磁盘上存储和恢复消息。 6. **log4j-1.2.17.jar**:这是一个流行的日志记录库,用于收集和记录应用程序运行时的信息,便于...

    activemq-rar-5.9.0.rar

    5. "activemq-kahadb-store-5.9.0.jar":包含了ActiveMQ使用的KahaDB存储引擎,这是一种轻量级、持久化的日志存储系统,用于存储和恢复消息。 6. "log4j-1.2.17.jar":经典的日志记录库,用于记录应用程序的运行...

    activemq-store-journal-1.4.jar.zip

    ActiveMQ的存储机制分为多种类型,包括本地文件系统存储、KahaDB存储、LevelDB存储以及JDBC存储等。其中,"Journal"通常指的是高速日志(Fast Journal),这是一个高效的数据记录和恢复机制。`activemq-store-...

    activemq-rar-5.7.0.rar

    6. `kahadb-5.7.0.jar`:这是ActiveMQ使用的持久化存储引擎KahaDB的实现,负责存储和恢复消息。 7. `spring-expression-3.0.7.RELEASE.jar`:Spring表达式语言(SpEL)库,允许在运行时动态评估表达式,增强了应用...

    如何实现ActiveMq的Topic的持久订阅

    ActiveMQ使用KahaDB存储引擎来保存这些信息,当消费者断开连接时,相关信息会被写入磁盘;当消费者重新连接时,ActiveMQ会读取这些信息并恢复订阅。 此外,了解ActiveMQ的配置也是很重要的,例如,可以在配置文件中...

    ActiveMQ-5.12.0

    这得益于其基于KahaDB的日志存储引擎,确保了高可用性和数据完整性。 4. **网络连接**:ActiveMQ支持多网络环境下的集群部署,可以通过网络连接将多个经纪人链接在一起,形成一个高可用的集群,实现负载均衡和故障...

    Apache ActiveMQ5.8

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

    ActiveMQ5.9.0.rar

    2. **持久化机制**:ActiveMQ提供了多种持久化选项,包括JDBC(Java数据库连接)存储、KahaDB(一种轻量级的日志存储引擎)以及LevelDB。这些机制确保了即使在服务器宕机后,消息也不会丢失,保证了消息的可靠性。 ...

Global site tag (gtag.js) - Google Analytics