问题描述
正常来说MQ内置数据持久化是为了确保消息不丢失,重启可以恢复数据,emqx的设计是允许消息丢失吗?(我可以这样理解?)
持久化的能力不是为了消息不丢失,是为了数据不丢失,概念上不要混淆。MQTT消息publish出来没有接受者就会丢失,持久化的能力是指,对所有的消息进行记录,把数据持久化下来。EMQ X是broker不是消息队列,持久化属于拓展的能力。
emqx 中的消息队列都是保存在内存中,重启之后,会话就消失了,那些遗留的消息也就丢了。有没有什么方法可以使没有被消费的消息保存下来,重启之后再加载到内存中?
文档中写道:
EMQX 企业版产品中,可以通过规则引擎或插件的方式,持久化消息到 Redis、MongoDB、Cassandra、MySQL、PostgreSQL 等数据库,以及 RabbitMQ、Kafka 等消息队列
那么,如果消息持久化的速度跟不上消息产生的速度,这个时候EMQX节点宕机了,那么 是不是意味着,有部分消息会丢失?
企业用户在投入前都需要做性能评估,确保整个系统是可控的;
4.x 版本中关键的 规则引擎 Kafka 桥接我们设计了磁盘缓存功能,确保消息过多、资源吞吐能力跟不上、资源短暂异常的时候可以缓存到本地磁盘上,5.0 的企业版中这一能力会添加到所有外部资源上。
PS:细分来说持久化应该包含:MQTT 会话持久化与 MQTT 消息持久化,前者的开源版会在 5.1 支持:基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化 | EMQ
我在开源版的文档中 看到了 storage_type 这个配置项
storage_type: ram | disc
ram
这个配置的作用是 选择消息是存放在磁盘还是内存中。
这个配置项 跟上面提到的【磁盘缓存】是类似的功能吗?
按道理来说,既然支持放在磁盘中,那么即使宕机,重启之后消息也不会丢失
不知道开源版支不支持 storage_type:disk 这个配置?
你好,这个配置项只限于指定保留消息的存储方式。目前开源版尚不支持持久化会话消息到磁盘。
请问会话持久化目前在开源版本上实现了吗?是在哪个版本上实现了?