ActiveMQ的持久化与集群

简介: ActiveMQ存储消息可以采用多种持久化方案,每种方案都有自己特有的集群方案。

ActiveMQ存储消息可以采用多种持久化方案,每种方案都有自己特有的集群方案。

1. 文件型持久化方案

文件型持久化方案包含三种存储方式:AMQ Message store, KahaDB,LevelDB Store。

AMQ Message store是ActiveMQ 5默认的存储。
KahaDB是ActiveMQ5.4的默认存储,是AMQ Message store的继任者。
LevelDB Store是也是基于文件的持久化数据库。

这3种持久化存储方式由于都是基于文件的,ActiveMQ broker集群方式可以采用Shared File System Master Slave方式,就是将数据文件保存在共享的文件系统里。Broker master 和 Broker slave共享数据文件,master挂掉之后,slave可以直接接管master的工作。

2. 基于JDBC持久化方案

这种方案是将消息通过JDBC保存在数据库中,ActiveMQ的JDBC方案支持多种数据库,Apache Derby,Axion,DB2,HSQL,Informix,MaxDB,MySQL,Oracle,Postgresql,SQLServer,Sybase。

在JDBC持久化方案中,ActiveMQ broker集群方式可以采用JDBC Master Slave方式。Broker master和Broker slave使用相同的数据库,但在同一时刻,只有master可以操作数据库,当master挂掉之后,slave可以直接接管master的工作。

在上面描述的集群方案中,broker已经是master-slave集群了,但是共享的数据库并不是集群,仍然存在单点故障的风险。一般采用2中方式来去除单点:

  1. 采用支持集群的数据库,很多数据库都支持集群部署,比如mysql和oracle。
  2. 采用例如C-JDBC这样的数据库集群中间件,将数据复制到多个独立的数据库中来避免单点。

3. Replicated LevelDB Store

在第3种方案中,也用到了LevelDB,但是它和我们之前提到的基于文件的持久方案完全不同。
Replicated LevelDB Store采用zookeeper从一组broker中选出一个master,master接受客户端的连接,然后其他broker则是slave,他们连接到master,并且不接受客户端的连接。所有的持久化操作都会复制(replicated)到连接的slave。

所有的消息都会等待一个法定人数(quorum)个slave更新完成。法定人数(quorum)表示2n+1。类似zookeeper中法定人数的概念。所以理论上,这种方案的数据可靠性类似于zookeeper。

目录
相关文章
|
消息中间件 存储 Kubernetes
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
630 1
|
6月前
|
消息中间件 存储 算法
深入了解Kafka的数据持久化机制
深入了解Kafka的数据持久化机制
359 0
|
6月前
|
消息中间件 存储 Java
RabbitMQ中的消息持久化是如何实现的?
RabbitMQ中的消息持久化是如何实现的?
110 0
|
消息中间件 存储 负载均衡
中间件优解——RabbitMQ和Kafka的高可用集群原理
大家对当前比较常用的RabbitMQ和Kafka是否有一些了解呢,了解的多一些也不是坏事,面试或者跟人聊技术的时候也会让你更有话语权嘛。 今天就跟大家聊一聊RabbitMQ和Kafka在处理高可用集群时的原理,看看它们与RocketMQ有什么不同。小伙伴们可以重新温习一下常见的消息中间件有哪些?你们是怎么进行技术选型的?这篇文章,了解一下他们之间的区别。
|
存储 Java Apache
Apache ZooKeeper - ZK的内存数据 + 持久化事务日志 + 数据快照 初探
Apache ZooKeeper - ZK的内存数据 + 持久化事务日志 + 数据快照 初探
216 0
|
消息中间件 存储 Java
RabbitMQ消息持久化机制
RabbitMQ消息持久化机制
169 0
|
存储 消息中间件 缓存
ActiveMQ系列:ActiveMQ的持久化机制
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的 就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送。
268 0
ActiveMQ系列:ActiveMQ的持久化机制
|
消息中间件 存储 NoSQL
ActiveMQ系列:基于LevelDB和 Zookeeper 的数据复制集群
LeveDB 5.6版本之后推出了 LevelDB 的持久化引擎,它使用了自定义的索引代替常用的 BTree 索引,其持久化性能高于KahaDB,虽然默认的持久化方式还是 KahaDB,但是 LevelDB 可能会是趋势。在5.9版本还提供了基于 LevelDB 和 Zookeeper 的数据复制方式,作为 Master-Slave 方式的首选数据复制方案。
277 0
ActiveMQ系列:基于LevelDB和 Zookeeper 的数据复制集群
|
消息中间件 存储 缓存
RabbitMQ持久化
我们已经看到了如何处理任务不丢失的情况(手动应答),但是如何保障当RabbitMQ服务停掉以后消息生产者发送过来的消息不丢失。默认情况下RabbitMQ退出或由于某种原因崩溃时,它忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事:我们需要将队列和消息都标记为持久化。
RabbitMQ持久化
|
消息中间件 存储 开发工具
ActiveMQ - 集群
ActiveMQ - 集群
173 0
ActiveMQ - 集群