卡夫卡中的追随者副本不同步

时间:2019-02-20 14:40:58

标签: apache-kafka

我有一个主题为partitions = 1replication factor = 5。 我开始发布有关此主题的消息。几秒钟后,令我惊讶的是,我观察到除领导者副本外,所有关注者都不同步。

开始制作之前:

  

主题:log_compaction_topic4-15分区:0领导者:5复制副本:5,1,2,3,4 Isr:5,1,2,3,4

开始制作后:

  

主题:log_compaction_topic4-15分区:0领导者:5复制副本:5,1,2,3,4 Isr:5

此处min.insync.replicas=5和其余主题配置具有默认值。 另外,我的制作人正在使用acks=1

发布

问题

  1. 即使mininsync.replicas=5

  2. ,为什么我仍可以进一步发布消息
  3. 我可以使所有关注者一直保持同步吗?

  4. 这是预期的行为吗?如果是,我是否会丢失一些消息以防领导者崩溃?

1 个答案:

答案 0 :(得分:0)

为什么即使min.insync.replicas = 5

,我也可以进一步发布消息

仅当您设置acks="-1" or acks="all"时,才会考虑此配置。

卡夫卡官方文件说:

  

当生产者将acks设置为“ all”(或“ -1”)时,最小不同步副本   指定必须确认写入的最小副本数   认为写入成功。如果不能达到这个最小值   遇到,那么制片人会提出一个例外(   NotEnoughReplicas或NotEnoughReplicasAfterAppend)

我可以使所有关注者一直保持同步吗?

如上所述,您可以先拥有acks="-1" or acks="all"然后提及min.insync.replicas=5

这是预期的行为吗?如果是,我是否会丢失一些消息以防领导者崩溃?

是的,如果领导者失败,您将丢失消息。 acks=1表示领导者会将记录写入其本地日志,但是会在不等待所有关注者的完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后立即失败,但在追随者复制记录之前失败,则记录将丢失。

评论问题:

但是我观察到(acks = all,min.insync.replicas = 1)和(acks = 1)之间的吞吐量差异。在acks = -1设置中,即使min.insync.replicas = 1,领导者仍在等待所有同步副本的确认,从而降低了吞吐量

来自this answer on Kafka

  

此外,最小同步副本设置还指定了   需要同步以使分区保持可用的副本   写。当生产者指定ack(-1 / all config)时,它将   那时仍在等待所有同步副本的确认   (与最小同步副本的设置无关)。

另外,one of the useful comment

  

请Jun(Apache Kafka的合著者)再次确认我的回答。它是   一个常见的误解是min.insync.replicas允许在ACK时   只有ISR的最小子集才能获得已发布的消息。然而   “最小”部分适用于其他内容。最小值是   定义ISR列表可以获取并仍然允许写入的数量。   当列表中的所有ISR都获得ACK时,总是返回ACK。   信息。否则,领导人选举将更加复杂   因为并非所有副本实际上都会同步。

文档:https://kafka.apache.org/documentation/#brokerconfigs