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=0
或 1
,则不会受到影响,但是当您如果领导者失败,这样做可能会导致数据丢失。
如果使用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,该分区的领导者需要等待更多数量的数据副本同步写入 - 因此性能较低。
来自 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=0
或 1
,则不会受到影响,但是当您如果领导者失败,这样做可能会导致数据丢失。
如果使用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,该分区的领导者需要等待更多数量的数据副本同步写入 - 因此性能较低。