【问题标题】:Can I create a Kafka topic with an ISR lower than the replication factor?我可以创建一个 ISR 低于复制因子的 Kafka 主题吗?
【发布时间】:2021-08-10 12:03:06
【问题描述】:

意义 rf =3 , byt Min.insyce.reaplica = 1, 当procuder setup ack=1时,我想确保只需要leader获取数据然后考虑好。

但是,我确实看到它带有默认值,即使我使用命令将其设置得较低。它会像这样自动显示。

Topic:isr-set1  PartitionCount:6    ReplicationFactor:3 Configs:min.insync.replicas=1
    Topic: isr-set1 Partition: 0    Leader: 3   Replicas: 3,1,5 Isr: 3,1,5
    Topic: isr-set1 Partition: 1    Leader: 4   Replicas: 4,5,3 Isr: 4,5,3
    Topic: isr-set1 Partition: 2    Leader: 0   Replicas: 0,3,4 Isr: 0,3,4
    Topic: isr-set1 Partition: 3    Leader: 2   Replicas: 2,4,0 Isr: 2,4,0

我希望是这样的:

Topic:isr-set1  PartitionCount:6    ReplicationFactor:3 Configs:min.insync.replicas=1
    Topic: isr-set1 Partition: 0    Leader: 3   Replicas: 3,1,5 Isr: 3
    Topic: isr-set1 Partition: 1    Leader: 4   Replicas: 4,5,3 Isr: 4
    Topic: isr-set1 Partition: 2    Leader: 0   Replicas: 0,3,4 Isr: 0
    Topic: isr-set1 Partition: 3    Leader: 2   Replicas: 2,4,0 Isr: 2

【问题讨论】:

    标签: apache-kafka apache-kafka-streams confluent-platform


    【解决方案1】:

    ISR 表示同步副本,它可以等于或低于复制因子,但你无法控制它。

    如果您使用replication factor = 3 创建主题,这意味着 Kafka 将该主题分区日志保存在 3 个不同的位置。为了保持在 3 个不同的地方,跟随者副本需要与分区的领导者副本同步。 In Sync ReplicasISR 表示此副本同步过程。有多少副本与领导者同步。

    但在您的情况下,您将 Min ISR 配置为一个。这意味着当您使用ack=all 生成数据时,如果至少有min ISR 数量的副本与包括领导者在内的领导者同步,它会在Kafka 中查找。如果不是,则返回错误且不生成。

    如果您只需要领导可用性,则不考虑此Min ISR。在生成消息时也不考虑 ISR。因此,如果您不需要复制(同步副本),只需使用replication factor = 1 创建主题。但这太冒险了,因为该主题分区没有容错能力。

    Replication

    Kafka 为每个主题的分区复制日志 可配置的服务器数量(您可以将此复制因子设置为 逐个主题)。这允许自动故障转移到这些 当集群中的服务器发生故障时复制副本,以便保留消息 出现故障时可用。

    min.insync.replicas

    当生产者将ack设置为“all”(或“-1”)时,此配置 指定必须确认写入的最小副本数 写入被认为是成功的。如果这个最小值不能 满足,则生产者将引发异常(要么 NotEnoughReplicas 或 NotEnoughReplicasAfterAppend)。使用时 min.insync.replicas 和 acks 一起允许你执行更大的 耐用性保证。一个典型的场景是创建一个主题 复制因子为 3,将 min.insync.replicas 设置为 2,然后 生产与“所有”的acks。这将确保生产者提高 如果大多数副本没有收到写入,则会出现异常。

    【讨论】:

    • 是的。我认为无论何时,一个经纪人被反弹或暂时死亡,如果 ISR 出现 3,将成为列表中的 2 个经纪人,同时会发生一些复制不足的分区。就像您提到的那样,我似乎无法控制此列表,尽管我可以通过配置设置 ISR。这很有趣,如果我们不能设置这个,为什么 kafka 一开始就暴露给我们?
    • 基本上,我只是想测试一下,如果说 Ack=1,或者全部,当我们有 Min.ISR =1 时,那么只有领导 ack 就足够了,因为如果 ISr=1,则不会无论 ack=1 还是 ack=all,应该只有 1 个 broker 被确认。这样做的充分理由是避免在某些场景中出现追随者滞后。你们有没有制作人仍然可以像这样生产的工作? @nipuna
    • 还有。对于 rf=1。这当然不是您提到的选项。我正在尝试找到一个可以同时涵盖 rf 和 isr 的解决方案。
    猜你喜欢
    • 2020-04-29
    • 2016-01-10
    • 2015-03-22
    • 2019-06-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多