【问题标题】:Async mode with acks = all带有 acks = all 的异步模式
【发布时间】:2020-10-29 05:50:31
【问题描述】:

我看到 ack all 的行为有所不同。从文档中,

acks=all 这意味着领导者将等待完整的同步 副本以确认记录。这保证了记录 只要至少保留一个同步副本就不会丢失 活。这是最有力的保证。这是等价的 到 acks=-1 设置。

我有一个 3 个代理设置和一个复制因子为 3 的主题。我对上述语句的理解是,如果任何一个代理关闭,领导者将等待(因为它*将等待ISR 确认 * 记录。但令我惊讶的是,事实并非如此,消息是由消费者生产和消费的。

是不是,在这种情况下,它不荣幸

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    acks = all 与默认为 1 的 min.insync.replicas 代理参数相关;这就是为什么你看到你的生产者发送没有问题而消费者也在消费的原因。 在您的情况下,有 3 个代理,如果您希望生产者只能在所有代理都运行时发送,您还必须设置 min.insync.replicas=3。

    【讨论】:

    • 嗯,我想知道如果我们只看 acks = all,它会增加混淆,因为“all”可能指的是所有副本。我们需要将其与“min.insync.replicas”一起解释,以真正了解“all”是多少:-))
    • 是的,这可能会令人困惑,我同意,但事实就是这样 :-)
    • 你知道是否有任何“特殊”原因,文档在关于“Acks=all”的描述中没有提到“min.insync.replicas” - acks=all 这意味着领导者将等待完整的同步副本集来确认记录。这保证了只要至少一个同步副本保持活动状态,记录就不会丢失。这是最有力的保证。这相当于 acks=-1 设置。
    【解决方案2】:

    看起来这需要与 min.insync.replicas 一起解释。

    当生产者将确认设置为“all”(或“-1”)时,min.insync.replicas 指定必须确认写入的最小副本数 写入被认为是成功的。如果这个最小值不能 满足,则生产者将引发异常(要么 NotEnoughReplicas 或 NotEnoughReplicasAfterAppend)。使用时 min.insync.replicas 和 acks 一起允许你执行更大的 耐用性保证。

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多