添加新分区Kafka 0.8.1.1

时间:2014-06-26 16:22:54

标签: apache-kafka

对于特定主题,我们希望每个代理有一个分区。我们的想法是,为了扩展规模,我们继续增加经纪人。但是,当我测试如何添加新分区时,它不会按照我期望的方式工作。例如,我有三个经纪人: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

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

2 个答案:

答案 0 :(得分:6)

如kafka doc所述,目前您必须手动触发重新分配。

  

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

简而言之,您必须将bin/kafka-reassign-partitions.sh工具与手动制作的迁移计划一起使用。

有关详情,请参阅guide on manual reassignment

答案 1 :(得分:0)

要在上面的答案中添加更多内容并进行更多说明,由于代理2064029280没有任何分区,因此在创建主题的分区后,它将被添加到群集中。否则,默认情况下,分区将在群集中的代理之间均匀分布,并且代理2064029280也将具有分区。 在我们更改分区后,添加新代理(2064029280)之后。因为分区重新分配工具无法自动研究Kafka集群中的数据分布,所以新分区将均匀分布在所有分区而不仅仅是新代理上。因此,它不仅将(所有)新分区分配给新代理以平衡数据分发。

相关问题