LevelDB持久性适配器使用LevelDB作为高性能的消息存储。它是一个基于文件的存储库,它使用了Google的LevelDB,将索引保存到包含消息的日志文件中。它经过优化,提供了比KahaDB更快的持久性。它类似于KahahDB,但是它没有使用自定义的b树实现来索引写前日志,而是使用基于LevelDB的索引,由于“append only”文件访问模式,这些索引具有一些很好的属性:

  • 快速更新(不需要进行随机磁盘更新)
  • 并发读取
  • 使用硬链接的快速索引快照

KahaDB和LevelDB存储都必须进行周期性的垃圾收集,以确定可以删除哪些日志文件。在KahaDB的情况下,这可能非常昂贵,因为您增加了存储的数据量,并且在收集发生时可能导致读/写停止。LevelDB存储使用一种便宜得多的算法来确定何时可以收集日志文件并避免这些停顿。

LevelDB的主要优势有:

  • 更高的持久吞吐量
  • broker重启时恢复时间更快
  • 支持并发的读访问
  • 在垃圾回收周期中不会暂停
  • 使用较少的读取IO操作来加载存储的消息
  • 支持XA事务
  • 检查重复的消息
  • 通过JMX暴露公开状态以进行监控
  • 支持复制

在ActiveMQ中配置使用LevelDB作为持久化存储方案实际上很简单,使用主配置文件中的persistence Adapter标记就可以完成。最简配置如下所示:

......
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
......
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB"/>
</persistenceAdapter>
......
</broker>
......

以上示例配置中,directory属性表示LevelDB的结构文件所放置的目录位置。请注意,由于log文件是顺序写的机制,所以log文件也会预占磁盘空间,并且log文件默认的大小就是100MB。那么只要生成一个log文件,就至少会占据100MB的存储空间(但这不代表总的已使用量)。也就是说,如果您将主配置文件中storeUsage标记的limit属性设置为200mb,那么透过ActiveMQ管理界面看到的现象就是:只要有任何一条PERSISTENT Message被接受,Store percent used立刻就会变成50%。如果您将storeUsage标记的limit属性为100mb,那么只要有任何一条PERSISTENT Message被接受,ActiveMQ服务端的Producer Flow Control策略就会立刻开始工作。

所以一定不要吝啬分配memoryUsage、storeUsage。依据您的团队在生产环境下的存储方案,也可以通过logSize属性改变LevelDB中单个log文件的大小。如下示例:

......
<!-- 限制大小为50mb -->
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB" logSize="52428800"/>
</persistenceAdapter>
......

默认的LevelDB存储策略中,当ActiveMQ接收到一条消息后,就会同步将这条消息写入到log文件中,并且同时在内存区域向Memtable写入位置索引。通过配置您也可以将这个过程改为“异步”:

......
<!-- 改为异步写log文件 -->
<persistenceAdapter>
<levelDB directory="${activemq.data}/levelDB" logSize="52428800" sync="false"/>
</persistenceAdapter>
......

以下列表展示了您可以使用的LevelDB的配置属性,使用“*”标识出来的属性是笔者认为重要的配置项:

关于LevelDB 详细请参加官网:http://activemq.apache.org/replicated-leveldb-store.html

Activemq特性之持久化--LevelDB特性的更多相关文章

  1. Redis数据库高级实用特性:持久化机制

    Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair

  2. ActiveMQ的消息持久化机制

    为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制. ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式 ...

  3. ActiveMQ消息的持久化策略

    持久化消息和非持久化消息的存储原理: 正常情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的.能够存储的最大消息数据在${ActiveMQ_HOME}/conf/activemq.xml ...

  4. Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth

    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1 Python 3_x 新特性1 python3.4新特性1 python3.5新特性1 值得关注的新特性1 ...

  5. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  6. 11g新特性与12c新特性

    1. 11g新特性概图 管理新特性> 开发新特性> 2. 12c 新特性概图

  7. 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版

    代码走查25条疑问   代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...

  8. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  9. Atitit.业务系统的新特性 开发平台 新特性的来源总结

    Atitit.业务系统的新特性 开发平台 新特性的来源总结 1.1. 语言新特性(java c# php js python lisp c++ oc swift ruby  go dart1 1.2. ...

随机推荐

  1. 基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版

    技术背景 海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达 ...

  2. 字符编码和Python代码操作文件

    字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...

  3. Solution -「CF 917D」Stranger Trees

    \(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点的有标号树,求与这棵树重合恰好 \(0,1,\cdots,n-1\) 条边的树的个数,对 \(10 ...

  4. Solution -「CF 1025D」Recovering BST

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第10章 - 部署kube-proxy组件

    文章目录 1.10.部署kube-proxy 1.10.0.创建kube-proxy证书 1.10.1.生成kube-proxy证书和秘钥 1.10.2.创建kube-proxy的kubeconfig ...

  6. JNDI漏洞利用探索

    最近学习了师傅寻找的一些JNDI漏洞的利用链受益匪浅,自己也尝试关于JNDI漏洞利用做一些挖掘,目前JNDI在利用过程我想到了两个问题. 测试每一个JNDI Bypass 利用链都需要手动更改URL很 ...

  7. Python 基于 TCP 传输协议的网络通信实现

    1.基础概念 什么是网络编程? 指在网络环境中,如何实现不在同一物理位置中的计算机之间进行数据通信 如果要保证数据通信顺利完成,则需要先了解如下几个概念: 1.1 协议 不同计算机内的进程之间进行数据 ...

  8. 树莓派GPIO开发(三):蜂鸣器-PWM调节

    配置环境 系统:Raspbian11(官方64位) 设备:树莓派CM4 一.写在前面 关于PWM的基本介绍在上一篇博客已经说过了:树莓派GPIO开发(二)RGB模块-PWM调节 在RGB模块中,我们主 ...

  9. JwtAccessTokenConverter问题整理

    Cannot convert access token to JSON 授权服务颁发token(未进行公私钥加密)后,携带此token请求资源服务,提示此错误. 使用token可以在线解析,跟踪代码后 ...

  10. 渗透测试之本地文件包含(LFI)

    一.本地文件包含 本地文件包含漏洞指的是包含本地的php文件,而通过PHP文件包含漏洞入侵网站,可以浏览同服务器所有文件,并获得webshell. 看见?page=标志性注入点,提示我们输入?=pag ...