Kafka:分区数量多于代理数量

ARP*_*RTY 6 apache-kafka

我有以下关于卡夫卡的问题:

  1. 如果我创建一个主题并指定分区数多于代理数,那么单个代理将处理 1 个以上的分区?

  2. 如果我创建一个主题并指定多于代理的复制因子,该主题是否会创建?

  3. 单个代理是否可以处理不同主题的多个分区。

Gio*_*ous 10

  1. 那是正确的。如果您的分区比可用代理多,那么您的某些代理将为每个主题存储多个分区。例如,假设您有一个活动代理和一个具有两个分区的主题;您的经纪人将如下所示:
    +-------------------+
    |      Topic X      |
    |    Partition 0    |
    |                   |
    |                   |
    |     Topic X       |
    |   Partition 1     |
    +-------------------+
Run Code Online (Sandbox Code Playgroud)
  1. 不,不可能创建具有比可用代理更高复制因子的主题。如果你尝试这样做,你会得到一个错误。例如,假设您正在尝试创建一个--replication-factor 3只有一个可用代理的主题:
>> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic myTestTopic

Error while executing topic command replication factor: 3 larger than available
brokers: 1
kafka.admin.AdminOperationException: replication factor: 3 larger than available
 brokers: 1
        at kafka.admin.AdminUtils$.assignReplicasToBrokers(AdminUtils.scala:70)
        at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:171)
        at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:93)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:55)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)
Run Code Online (Sandbox Code Playgroud)
  1. 确实。假设您只有 2 个代理和 3 个主题,每个主题都有 2 个带有replication-factor=1. 您的经纪人的示例概述如下所示:
    +-------------------+
    |      Topic 1      |
    |    Partition 0    |
    |                   |
    |                   |
    |     Topic 3       |
    |   Partition 1     |
    |                   |
    |                   |
    |     Topic 2       |
    |   Partition 1     |
    +-------------------+


    +-------------------+
    |      Topic 1      |
    |    Partition 1    |
    |                   |
    |                   |
    |     Topic 3       |
    |   Partition 0     |
    |                   |
    |                   |
    |     Topic 2       |
    |   Partition 0     |
    +-------------------+
Run Code Online (Sandbox Code Playgroud)