对于特定主题,我们希望每个代理有一个分区。我们的想法是,为了扩展规模,我们继续增加经纪人。但是,当我测试如何添加新分区时,它不会按照我期望的方式工作。例如,我有三个经纪人: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
选项,该选项在创建主题时有效,但在更改主题时不起作用。
答案 0 :(得分:6)
如kafka doc所述,目前您必须手动触发重新分配。
在0.8.1中,分区重新分配工具无法自动研究Kafka群集中的数据分布并移动分区以实现均匀的负载分配。因此,管理员必须弄清楚应该移动哪些主题或分区。
简而言之,您必须将bin/kafka-reassign-partitions.sh
工具与手动制作的迁移计划一起使用。
有关详情,请参阅guide on manual reassignment。
答案 1 :(得分:0)
要在上面的答案中添加更多内容并进行更多说明,由于代理2064029280没有任何分区,因此在创建主题的分区后,它将被添加到群集中。否则,默认情况下,分区将在群集中的代理之间均匀分布,并且代理2064029280也将具有分区。 在我们更改分区后,添加新代理(2064029280)之后。因为分区重新分配工具无法自动研究Kafka集群中的数据分布,所以新分区将均匀分布在所有分区而不仅仅是新代理上。因此,它不仅将(所有)新分区分配给新代理以平衡数据分发。