来自kafka文档
当生产者将acks设置为“ all”(或“ -1”)时,此最小insync.replica配置 指定必须确认写入的最小副本数 认为写入成功。
它表示当最小数量的同步副本得到确认时,写入成功,但是当我以min.insync.replica
为1和3进行性能测试时(对于5中partition = 1和RF = 5的主题经纪商设置),则卡夫卡生产者的绩效与acks='all'
相同。
因此,按主题配置min.insync.replica
是否会影响acks="all"
的Kafka生产者吞吐量(隔离运行)?
答案 0 :(得分:1)
仅在涉及群集的可用性和Kafka中的可靠性保证时,您才关心min.insync.replica
。它与吞吐量无关。将min.insync.replica
设置为> 1可确保没有数据丢失。吞吐量因acks
配置而异。
min.insync.replica
的意义主要在于您在kafka中的消息的可用性和持久性保证。
无论您为此设置多少,追随者的确会消耗领导者的消息,以确保它们在ISR列表中,除非它们崩溃或变坏。
答案 1 :(得分:1)
如果您使用acks='all'
,则领导者会等到同步副本收到消息后再发送回确认或错误,因此会影响性能。对于min.insync.replica=1
,一旦将消息写入领导者,生产者就会得到响应。它应该比使用min.insync.replica=3
更快,因为在这种情况下,生产者将等待2个副本以获取所有消息,然后才能将其视为已提交。
您的结果意味着您的经纪人之间的等待时间非常短。我相信,如果在不同的数据中心/区域中启动代理,您应该会看到差异。
答案 2 :(得分:0)
如果您不设置 acks='all'
和 min.insync.replica
> 1,请注意您有数据丢失的风险。如果领导者宕机,则意味着无法保证复制的节点是领导者的副本。这实际上是 Kafka 防止分布式系统等情况的主要思想。