【问题标题】:What message persistence guarantee NATS streaming provides in cluster and FT modes?NATS 流在集群和 FT 模式下提供什么消息持久性保证?
【发布时间】:2026-01-27 08:10:01
【问题描述】:

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

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

NATS 流服务器似乎按照这些思路做了一些事情,但是 clusteringfault tolerance 的文档并没有很清楚地说明每种情况下提供的持久性保证。 producer integration 上的文档确认服务器将主动 ACK 已发布的消息,无论是同步还是通过回调,但它没有明确 ACK 是否意味着此时消息已被持久存储。

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

【问题讨论】:

    标签: nats.io nats-streaming-server


    【解决方案1】:

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

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

    【讨论】:

    • 我希望我们会使用 SQL 支持的 FT 模式,所以这对我们来说已经足够了。
    最近更新 更多