转自:http://www.iteye.com/topic/1121713
前几天看到淘宝开源了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
下面是具体每个文件的内部数据格式:
分享到:
相关推荐
本示例将详细讲解如何基于KahaDB存储引擎构建ActiveMQ的高可用集群。 KahaDB是ActiveMQ的一个持久化存储机制,它提供了快速、可扩展和可靠的存储解决方案。在高可用集群中,KahaDB确保即使在broker故障时,消息也...
jdbc持久化方式是指使用jdbc连接池来保存消息,而kahadb持久化方式是指使用kahadb存储引擎来保存消息。 ActiveMQ 事务 事务是指ActiveMQ对消息的事务处理,即ActiveMQ将多个消息作为一个事务来处理。ActiveMQ提供...
2. 数据复制:利用Kahadb存储引擎的数据复制功能,保证数据一致。 十、常见问题与解决 1. 消息丢失:检查持久化设置、网络连接和消费者配置。 2. 性能瓶颈:分析日志,定位CPU、内存或网络问题。 3. 安全问题:定期...
4. **持久化**:ActiveMQ提供了强大的持久化机制,确保即使在服务器重启后,消息也能被正确处理,这得益于其使用了高效的KahaDB存储引擎。 5. **高可用性**:通过集群和故障转移,ActiveMQ能够实现高可用性,确保...
4. **KahaDB存储引擎**:这是ActiveMQ内置的默认持久化存储,不需要额外的数据库。KahaDB是一个轻量级、高效的日志文件系统,提供消息持久化。`kahaDB-store.jar` 是与KahaDB相关的库。 5. **OpenJPA**:OpenJPA是...
默认情况下,ActiveMQ使用KahaDB存储引擎,但也可以选择其他选项如LevelDB或JDBC。 总的来说,Apache ActiveMQ在Linux环境中的部署和管理涉及到多个方面,包括安装、配置、安全性、性能优化和故障处理。理解这些...
Kahadb 是 ActiveMQ 从版本 5.4 之后的默认消息存储引擎。消息存储机制是消息中间件最重要的核心部件和性能提升点。Kahadb 的索引是 B+ 树,而其最基础的存储机制则是基于“随机存储文件”设计的。 Kahadb 中磁盘...
它使用KahaDB存储引擎来保存消息,确保高可用性和可靠性。 3. **多种协议支持**:除了JMS,ActiveMQ还支持多种网络协议,包括OpenWire、STOMP、AMQP、MQTT和WS(WebSocket),这些协议使得ActiveMQ能够与多种编程...
5. **KahaDB Store**:`activemq-kahadb-store-5.9.1.jar`包含了ActiveMQ的KahaDB存储引擎,这是一种持久化机制,用于在内存中缓存消息并将其写入磁盘,确保即使在服务器故障后也能恢复消息。 6. **Log4j**:`log4j...
这段代码配置了activemq的持久化adapter,使用kahaDB作为存储引擎,存储目录为${activemq.base}/data/kahadb,journalMaxFileLength为50mb。 三、系统使用量 系统使用量是activemq中用于控制消息生产者流控的机制...
- **KahaDB**:ActiveMQ 5.9默认使用KahaDB作为持久化存储,它是一种高效的日志存储引擎,可以在`org.apache.activemq.store.kahadb`中找到相关代码。 - **JDBC Store**:对于大型部署,可以选择使用JDBC存储,...
此外,还可以通过使用更高效的存储引擎,如KahaDB,提高消息的存储和检索速度。 9. **API和库支持**:ActiveMQ提供了丰富的客户端库,包括Java、C++、Python、.NET等多种语言,方便开发者在不同环境中使用。 10. *...
5. **activemq-kahadb-store-5.10.0.jar**:KahaDB是ActiveMQ的一种持久化存储引擎,用于在磁盘上存储和恢复消息。 6. **log4j-1.2.17.jar**:这是一个流行的日志记录库,用于收集和记录应用程序运行时的信息,便于...
5. "activemq-kahadb-store-5.9.0.jar":包含了ActiveMQ使用的KahaDB存储引擎,这是一种轻量级、持久化的日志存储系统,用于存储和恢复消息。 6. "log4j-1.2.17.jar":经典的日志记录库,用于记录应用程序的运行...
ActiveMQ的存储机制分为多种类型,包括本地文件系统存储、KahaDB存储、LevelDB存储以及JDBC存储等。其中,"Journal"通常指的是高速日志(Fast Journal),这是一个高效的数据记录和恢复机制。`activemq-store-...
6. `kahadb-5.7.0.jar`:这是ActiveMQ使用的持久化存储引擎KahaDB的实现,负责存储和恢复消息。 7. `spring-expression-3.0.7.RELEASE.jar`:Spring表达式语言(SpEL)库,允许在运行时动态评估表达式,增强了应用...
ActiveMQ使用KahaDB存储引擎来保存这些信息,当消费者断开连接时,相关信息会被写入磁盘;当消费者重新连接时,ActiveMQ会读取这些信息并恢复订阅。 此外,了解ActiveMQ的配置也是很重要的,例如,可以在配置文件中...
这得益于其基于KahaDB的日志存储引擎,确保了高可用性和数据完整性。 4. **网络连接**:ActiveMQ支持多网络环境下的集群部署,可以通过网络连接将多个经纪人链接在一起,形成一个高可用的集群,实现负载均衡和故障...
10. **持久化机制**:支持KahaDB和LevelDB两种持久化引擎,保证在系统重启后能够恢复消息队列的状态。 在实际应用中,Apache ActiveMQ 5.8可以应用于各种场景,如微服务之间的通信、大数据流处理、事件驱动架构等。...
2. **持久化机制**:ActiveMQ提供了多种持久化选项,包括JDBC(Java数据库连接)存储、KahaDB(一种轻量级的日志存储引擎)以及LevelDB。这些机制确保了即使在服务器宕机后,消息也不会丢失,保证了消息的可靠性。 ...