【问题标题】:what if I have single broker with replication factor as 3 in kafka?如果我在 kafka 中有一个复制因子为 3 的代理怎么办?
【发布时间】:2021-01-02 13:44:00
【问题描述】:

如果我正在创建一个具有 1 个代理 1 个主题 1 分区和复制因子为 3 的新集群,那么会发生什么?它会在该单个代理下创建 3 个副本(分区)?如果是,leader是如何选举产生的?

【问题讨论】:

  • 如果您尝试在只有一个代理的 Kafka“集群”上创建复制因子为 3 的主题,您应该会收到一条错误消息,因为这是不可能的。但是,您可以拥有任意数量的分区。

标签: apache-kafka kafka-consumer-api kafka-producer-api


【解决方案1】:

如果您尝试创建一个复制因子大于集群中可用代理数量的主题,您将收到如下异常。

> ./kip-kafka-topics --create --topic multiple_replicas_on_single_broker --replication-factor 3 --partitions 10

Error while executing topic command : org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.
[2020-09-15 17:45:42,649] ERROR java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.
        at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
        at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
        at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:260)
        at kafka.admin.TopicCommand$AdminClientTopicService.createTopic(TopicCommand.scala:175)
        at kafka.admin.TopicCommand$TopicService.createTopic(TopicCommand.scala:134)
        at kafka.admin.TopicCommand$TopicService.createTopic$(TopicCommand.scala:129)
        at kafka.admin.TopicCommand$AdminClientTopicService.createTopic(TopicCommand.scala:157)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:60)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)
Caused by: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.

在复制部分的 Kafka 文档中,解释了复制是针对服务器故障完成的:

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

因此,如果您在一台服务器上放置多个副本,则如果该服务器出现故障,它将无法恢复。


查看您的问题“它在该单个代理下创建 3 个副本(分区)?”我还建议清楚地了解 replicapartition 之间的区别。这个post 可能会对你有所帮助。

【讨论】:

    【解决方案2】:

    欢迎你自己尝试……

    您将收到一条错误消息,提示副本比可用的代理多

    【讨论】:

      猜你喜欢
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多