NATS流在集群和FT模式下提供了什么消息持久性保证



我正在寻找一个具有消息持久性保证的流式服务器,即在服务器确认向生产者发布消息之前,保证生产者发布的消息能够持久存储。

我的用例要求我们减少丢失任何生成的消息的可能性。如果需要,生产者可以重播消息,但他们需要确保ACKed消息是持久的,并且将由流服务器传递给消费者。

NATS流式处理服务器似乎沿着这些路线做了一些事情,但用于集群和容错的文档并没有非常清楚在每种情况下提供什么持久性保证。生产者集成文档确认服务器将主动确认已发布的消息,无论是同步还是通过回调,但它并没有明确确认是否意味着消息在此时被持久存储。

存储配置文档,特别是SQL选项,简要提到了来自服务器的ACK意味着持久的存储保证,但尚不清楚这在集群和容错以及不同的持久性后端(文件或SQL(的情况下究竟适用于什么。

NATS Streaming将在发送回发布者ACK之前保留消息。存储实现(filestore/SQL(可能会使用一些缓存,但无论如何,在ACK被发送回之前,写入都会被同步(除非被禁用(。

然而,在集群模式下,文件存储同步被禁用,因为我们依赖于数据被复制到集群的每个节点的事实,因此您需要同时发生多个故障才能丢失消息。(请注意,文件存储实现有一个选项可以定期执行自动同步:请参阅此处的auto_sync

最新更新