Apache kafka 《卡夫卡》中的追随者复制品失去同步
我有一个主题是Apache kafka 《卡夫卡》中的追随者复制品失去同步,apache-kafka,Apache Kafka,我有一个主题是partitions=1和replication factor=5。 我开始发布关于这个主题的消息。几秒钟后,令我惊讶的是,我发现除了领袖复制品之外,所有的追随者都不同步 开始制作前: 主题:日志压缩主题4-15分区:0前导:5个副本:5,1,2,3,4 Isr:5,1,2,3,4 开始制作后: 主题:日志压缩主题4-15分区:0前导:5个副本:5,1,2,3,4 Isr:5 这里,min.insync.replicas=5和剩余的主题配置具有默认值。 另外,我的制作人正在使用ac
partitions=1
和replication factor=5
。
我开始发布关于这个主题的消息。几秒钟后,令我惊讶的是,我发现除了领袖复制品之外,所有的追随者都不同步
开始制作前:
主题:日志压缩主题4-15分区:0前导:5个副本:5,1,2,3,4 Isr:5,1,2,3,4
开始制作后:
主题:日志压缩主题4-15分区:0前导:5个副本:5,1,2,3,4 Isr:5
这里,min.insync.replicas=5
和剩余的主题配置具有默认值。
另外,我的制作人正在使用acks=1
问题
mininsync.replicas=5
为什么我能够进一步发布消息,即使min.insync.replicas=5 只有在设置
acks=“-1”或acks=“all”
时,才会考虑此配置
卡夫卡官方文件说:
当生产者将ACK设置为“全部”(或“-1”)时,min.insync.replications
指定必须确认写入的最小副本数
使写入被认为是成功的。如果此最小值不能
则制作人将提出一个异常(或
noteNoughReplicates或noteNoughReplicateSafterappend)
我可以让所有追随者始终保持同步吗?
如上所述,您可以通过使用acks=“-1”或acks=“all”
然后提及min.insync.replicas=5
来实现它
这是预期的行为吗?如果是,我是否会在leader崩溃时释放一些消息?
是的,如果leader失败,您将丢失消息acks=1
意味着leader将把记录写入其本地日志,但将在不等待所有追随者完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后立即失败,但在追随者复制记录之前,记录将丢失
评论中的问题:
但我观察到(acks=all,min.insync.replicas=1)和(acks=1)之间的吞吐量差异。在acks=-1设置中,即使min.insync.replicas=1,leader仍在等待所有同步副本确认,从而降低吞吐量 发件人: 此外,“同步副本中的最小值”设置还指定了复制副本的最小数量 需要同步以使分区保持可用的副本 写作。当生产者指定ack(-1/all config)时,它将 此时仍在等待来自所有同步副本的确认 (独立于最小同步副本的设置) 还有: 刚刚与Jun(ApacheKafka的合著者)再次确认了我的答案。它是 一个常见的误解是min.insync.replicas允许在 只有一小部分ISR获得发布的消息。然而 “最小”部分适用于其他部分。最小值为 定义ISR列表可以达到多小且仍允许写入。 当列表中的所有ISR获得 否则,领导人选举将更加复杂 因为并不是所有的副本都是同步的
文档说明:“min.insync.replicas指定必须确认写入的副本的最小数量,才能将写入视为成功”。如果我们设置
acks=all
和min.insync.replicas=1
,会怎么样?这与设置acks=1
相同吗?是。这是相同的,但我观察到(acks=all
,min.insync.replicas=1
)和(acks=1)之间的吞吐量差异。在acks=-1
设置中,即使min.insync.replicas=1
,leader仍在等待所有同步副本确认,从而降低吞吐量。这很奇怪。让我看看是否能找到有用的东西。@Markiv我已经在回答中澄清了您的疑问。