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

What message persistence guarantee NATS streaming provides in cluster and FT modes?

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

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

NATS Streaming 服务器似乎按照这些思路做了一些事情,但 clustering and fault tolerance don't make it very clear what persistence guarantee is provided in each case. The doc on producer integration 的文档确认服务器将主动确认已发布的消息,无论是同步还是通过回调,但它没有明确说明是否ACK 表示消息已在此时或尚未持久存储。

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

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

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