min.insync.replica 配置会影响 Kafka 生产者吞吐量吗?

Does min.insync.replica configuration affect Kafka producer throughput?

来自 kafka 文档

When a producer sets acks to "all" (or "-1"), this min.insync.replica configuration specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful.

它说当同步副本的最小数量确认时,写入成功但是当我 运行 性能测试 min.insync.replica 作为 1 和 3(对于分区=1 的主题和 R.F=5 in 5 broker setup),kafka producer 的性能与 acks='all' 相同。

那么,min.insync.replica 每个主题的配置是否会影响 acks="all" 的 Kafka 生产者吞吐量(运行 隔离)?

min.insync.replica 是必须确认已成功接收数据才能成功写入的最小副本数。

如果您将 min.insync.replica 设置为 3 和 acks=all,吞吐量肯定会受到影响,但如果您设置 acks=01,则不会受到影响,但是当您如果领导者失败,这样做可能会导致数据丢失。

如果使用acks='all',leader 会等到同步副本收到消息后才发回确认或错误,因此性能会受到影响。在 min.insync.replica=1 的情况下,一旦消息被写入领导者,生产者就会得到响应。它应该比使用 min.insync.replica=3 更快,因为在这种情况下,生产者等待 2 个副本获取所有消息,然后才能将消息视为已提交。

您的结果表明您的代理之间的延迟非常低。我相信如果您在不同的 datacenters/regions.

中启动经纪人,您应该会看到不同之处

如果您不设置 acks='all'min.insync.replica > 1,请注意您有数据丢失的风险。如果领导者宕机,则意味着无法保证复制的节点是领导者的副本。这实际上是 Kafka 防止分布式系统等情况的主要思想。

当生产者将 acks 设置为“全部”(或“-1”)时,min.insync.replicas 指定必须确认写入才能被视为成功的最小副本数

当一起使用时,min.insync.replicas 和 acks 允许您执行更大的持久性保证。一个典型的场景是创建一个复制因子为 3 的主题,将 min.insync.replicas 设置为 2,并使用“all”

的 acks 生成

更高 min.insync.replicas,该分区的领导者需要等待更多数量的数据副本同步写入 - 因此性能较低。