我有一个包含以下副本的分区:
Topic: topicname Partition: 10 Leader: 1 Replicas: 1,2,4,3 Isr: 1,2,3
副本4是不存在的代理。我不小心将这个代理添加到副本集中作为拼写错误。
我想从副本集中删除4。但是在运行kafka-reassign-partitions.sh
之后,删除副本#4的重新分配永远不会完成。
kafka-reassign-partitions.sh --zookeeper myzookeeperhost:2181 --reassignment-json-file remove4.txt --execute
remove4.txt看起来像
{ "partitions": [
{ "topic": "topicname", "partition": 2, "replicas": [1,2,3] }
], "version": 1 }
重新分配被卡住了:
kafka-reassign-partitions.sh --zookeeper myzookeeperhost:2181 --reassignment-json-file remove4.txt --verify
Status of partition reassignment:
Reassignment of partition [topicname,10] is still in progress
我检查了控制器日志,它看起来像是重新分配命令,但之后没有任何事情发生:
[2017-08-01 06:46:07,653] DEBUG [PartitionsReassignedListener on 101 (the controller broker)]: Partitions reassigned listener fired for path /admin/reassign_partitions. Record partitions to be reassigned {"version":1,"partitions":[{"topic":"topicname","partition":10,"replicas":[1,2,3]}]} (kafka.controller.PartitionsReassignedListener)
关于我做错的任何想法?如何从副本集中删除代理#4? 更新:我正在运行kafka 10
答案 0 :(得分:3)
我能够通过启动一个新代理来解决这个问题,该代理的代理与已添加的代理匹配(在您的情况下为4)。
Kafka Quickstart指南向您展示了如何启动具有特定ID的代理。将节点设置为id 4后,运行:
./bin/kafka-topics.sh --zookeeper localhost:2181 --topic badbrokertest --describe
您应该会看到所有副本都在 isr 列中,如下所示:
Topic:badbrokertest PartitionCount:3 ReplicationFactor:3 Configs:
Topic: badbrokertest Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: badbrokertest Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: badbrokertest Partition: 2 Leader: 1 Replicas: 1,2,3,4 Isr: 1,2,3,4
现在您可以重新分配分区了!
./bin/kafka-reassign-partitions.sh --reassignment-json-file badbroker2.json --zookeeper localhost:2181
badbroker2.json的样子:
{
"version":1,
"partitions":[
{"topic":"badbrokertest","partition":0,"replicas":[1,2,3]},
{"topic":"badbrokertest","partition":1,"replicas":[1,2,3]},
{"topic":"badbrokertest","partition":2,"replicas":[1,2,3]}
]
}
简而言之,一旦您通过添加丢失的代理同步所有副本,您就可以删除不需要的代理。
如果您正在使用多个服务器,请务必在配置中设置侦听器字段,以使其他经纪人可以使用您的临时代理。快速入门指南并未考虑这种情况。
listeners=PLAINTEXT://10.9.1.42:9093