【问题标题】:Does min.insync.replica configuration affect Kafka producer throughput?min.insync.replica 配置会影响 Kafka 生产者吞吐量吗?
【发布时间】:2018-09-07 05:42:27
【问题描述】:
来自 kafka 文档
当生产者将ack设置为“all”(或“-1”)时,这个 min.insync.replica 配置
指定必须确认写入的最小副本数
写入被认为是成功的。
它说当最小数量的同步副本确认时,写入成功,但是当我使用 min.insync.replica 作为 1 和 3 运行性能测试时(对于 partition=1 和 R.F=5 的主题,在 5 个代理设置中),kafka producer的性能,与acks='all'是一样的。
那么,min.insync.replica 每个主题的配置是否会影响带有acks="all" 的 Kafka 生产者吞吐量(单独运行)?
【问题讨论】:
标签:
apache-kafka
performance-testing
throughput
【解决方案1】:
如果你使用acks='all',leader 会等到 in-sync 副本收到消息后再发回确认或错误,因此会影响性能。在min.insync.replica=1 的情况下,一旦消息被写入领导者,生产者就会得到响应。它应该比使用min.insync.replica=3 更快,因为在这种情况下,生产者会等待 2 个副本来获取所有消息,然后才能将消息视为已提交。
您的结果意味着您的代理之间的延迟非常低。如果您在不同的数据中心/区域启动代理,我相信您应该会看到差异。
【解决方案2】:
min.insync.replica 是必须确认数据已成功接收才能成功写入的最小副本数。
min.insync.replica 设置为 3 和acks=all 肯定会影响吞吐量,但设置acks=0 或1 不会影响吞吐量,但这样做时可能会丢失数据领导失败了。
【解决方案3】:
如果您没有设置acks='all' 和min.insync.replica > 1,请注意您有丢失数据的风险。如果领导者宕机,则意味着无法保证复制的节点是领导者的副本。这实际上是 Kafka 防止分布式系统等情况的主要思想。
【解决方案4】:
当生产者将确认设置为“all”(或“-1”)时,min.insync.replicas 指定必须确认写入才能被视为成功的最小副本数
当一起使用时,min.insync.replicas 和 acks 允许您强制执行更大的持久性保证。一个典型的场景是创建一个复制因子为 3 的主题,将 min.insync.replicas 设置为 2,并使用“all”的 acks 生成
min.insync.replicas 越高,该分区的领导者需要等待更多数量的数据副本同步写入 - 因此性能较低。