Kafka:如何从副本集中删除代理



我有一个包含以下副本的分区:

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 

其中 删除4.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? 更新:我正在运行卡夫卡 10

我能够通过启动一个新代理来解决此问题,该代理具有与添加的代理 ID 匹配的代理 ID(在您的案例中为 4(。

Kafka 快速入门指南介绍了如何使用特定 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

最新更新