分区的重新分配无限地卡在"Still in progress"状态



我们有6个节点的kafka集群。在这6台机器中,有3台同时拥有卡夫卡+动物园管理员,其余3台只有卡夫卡。最近,我们又增加了一个kafka节点。在将分区重新分配给所有节点(包括较新的节点(时,我们执行了以下命令:

/opt/kafka/bin/kafka-reassign-partitions.sh --reassignment-json-file new_assignment_details.json --execute --zookeeper localhost:2181

然而,当我们使用以下命令验证状态时,

/opt/kafka/bin/kafka-reassign-partitions.sh --reassignment-json-file new_assignment_details.json --verify --zookeeper localhost:2181

我们得到以下输出。一些分区正在重新分配中。

/opt/kafka/bin/kafka-reassign-partitions.sh --reassignment-json-file new_assignment_details.json --verify --zookeeper localhost:2181 | grep 'progress'
Reassignment of partition [topic-name,854] is still in progress
Reassignment of partition [topic-name,674] is still in progress
Reassignment of partition [topic-name,944] is still in progress
Reassignment of partition [topic-name,404] is still in progress
Reassignment of partition [topic-name,314] is still in progress
Reassignment of partition [topic-name,853] is still in progress
Reassignment of partition [prom-metrics,403] is still in progress
Reassignment of partition [prom-metrics,134] is still in progress

两者都没有办法:

  1. 取消正在进行的分区重新分配
  2. 回滚也是不可能的。(当我们尝试这样做时,它会说"有一个现有的分配正在运行。">

Kafka版本:0.10.1.1

平台:Amazon Linux 1 x86_64 GNU/Linux

有人能帮我吗?

您可以通过删除zk节点来取消正在进行的分区重新分配:delete/admin/remove_partions。然后您可以回滚或使用另一个json文件重新分配。

在我的情况下,为了取消当前分区的重新分配并能够执行另一个重新分配,您应该:

  1. 删除/admin/reassign_partitionszk节点
  2. 删除/controllerzk节点以重新选择活动控制器

UPDATE
请考虑使用kafka-remove-partitions.sh的--additional参数!

继@Mostafa Bayat之后,0.10版本非常旧,管理是手动的,而且容易出错。AdminAPI包含在kafka 2.6中(我相信(,并在以下版本中进行了改进。(见KIP-236(

每个人都应该使用最新的2.x(在撰写本文时为2.8.1(或最新的3.x(目前为3.2.1(,以利用adminapi,该adminapi使kafka-reassign-partitions.sh的重新分配成为可能,而无需在zookeeper中手动编辑。(3.x正在努力完全删除zk(。

最新更新