Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 添加新分区Kafka 0.8.1.1_Apache Kafka - Fatal编程技术网

Apache kafka 添加新分区Kafka 0.8.1.1

Apache kafka 添加新分区Kafka 0.8.1.1,apache-kafka,Apache Kafka,对于特定主题,我们希望每个代理有一个分区。我们的想法是,为了扩大规模,我们不断增加经纪人。然而,当我测试如何添加新分区时,它并没有以我预期的方式工作。例如,我有三个经纪人:2064029428、2064029280、2064028458。我创建了一个新主题: /opt/kafka/bin/kafka-topics.sh --create --zookeeper zk.net:2181/stream --topic test --partitions 2 --replication-factor

对于特定主题,我们希望每个代理有一个分区。我们的想法是,为了扩大规模,我们不断增加经纪人。然而,当我测试如何添加新分区时,它并没有以我预期的方式工作。例如,我有三个经纪人:2064029428、2064029280、2064028458。我创建了一个新主题:

/opt/kafka/bin/kafka-topics.sh --create --zookeeper zk.net:2181/stream --topic test --partitions 2 --replication-factor 1

/opt/kafka/bin/kafka-topics.sh --describe --zookeeper zk.net:2181/stream --topic test
Topic:test  PartitionCount:2    ReplicationFactor:1 Configs:
Topic: test Partition: 0    Leader: 2064029428  Replicas: 2064029428    Isr: 2064029428
Topic: test Partition: 1    Leader: 2064028458  Replicas: 2064028458    Isr: 2064028458
然后我修改主题以添加另一个分区

/opt/kafka/bin/kafka-topics.sh --alter --zookeeper zk.net:2181/stream --topic test --partitions 3

/opt/kafka/bin/kafka-topics.sh --describe --zookeeper zk.net:2181/stream --topic test
Topic:test  PartitionCount:3    ReplicationFactor:1 Configs:
Topic: test Partition: 0    Leader: 2064029428  Replicas: 2064029428    Isr: 2064029428
Topic: test Partition: 1    Leader: 2064028458  Replicas: 2064028458    Isr: 2064028458
Topic: test Partition: 2    Leader: 2064029428  Replicas: 2064029428    Isr: 2064029428

我希望新分区是在broker 2064029280上创建的,因为它当前没有分区。相反,我在同一个代理2064029428上得到两个分区。这是预期的吗?有没有办法控制新分区的添加位置?我尝试了
--replica assignment
选项,该选项在创建主题时有效,但在更改主题时无效。

正如卡夫卡文档中所述,当前您必须手动触发重新分配

在0.8.1中,分区重新分配工具无法自动研究Kafka集群中的数据分布,并移动分区以获得均匀的负载分布。因此,管理员必须弄清楚应该移动哪些主题或分区

简言之,您必须在手动编制的迁移计划中使用
bin/kafka reassign partitions.sh
工具


有关更多信息,请参阅。

要对上述答案进行更多补充和澄清,因为代理2064029280没有任何分区,所以在创建主题的分区后,它将被添加到集群中。否则,默认情况下分区将均匀分布在集群中的代理上,代理2064029280也将拥有该分区。 当我们更改分区时,在添加新的代理(2064029280)之后。新的分区将均匀地分布在所有分区上,而不仅仅是新的代理,因为“分区重新分配工具无法自动研究Kafka集群中的数据分布”。因此,它不只是将(所有)新分区分配给新代理以平衡数据分布