1

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

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

NATS 流服务器似乎在做一些事情,但是集群容错的文档并没有很清楚地说明在每种情况下都提供了哪些持久性保证。关于生产者集成的文档确认服务器将主动 ACK 已发布的消息,无论是同步还是通过回调,但它没有明确 ACK 是否意味着该消息在此时已持久存储。

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

4

1 回答 1

1

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

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

于 2020-11-18T15:48:45.020 回答