You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka服务器处理请求遇未知错误,分区重分配仍在进行

我之前碰到过好几次Kafka分区重分配卡住还报这种UnknownServerException的情况,给你梳理几个实用的排查和解决步骤,亲测有效:

排查与解决步骤

1. 先确认分区重分配的真实状态

别光盯着“进行中”的提示,先用Kafka自带工具查一下任务的实际进度:

kafka-reassign-partitions.sh --bootstrap-server <你的Kafka地址:端口> --reassignment-json-file <你之前用的重分配配置文件> --verify

这条命令会明确告诉你哪些分区已经完成重分配,哪些还在卡着。如果test-22分区一直处于pending状态,基本可以确定是副本同步环节出了问题。

2. 检查目标Broker的基础状态

报错的是Broker 101,先登录这台机器排查几个核心点:

  • 磁盘空间:用df -h检查Kafka数据目录所在磁盘,要是空间满了,副本根本写不进去,自然会报错。
  • 文件权限:查看test-22分区的数据目录权限,确保Kafka运行用户有读写权限:
    ls -l /path/to/kafka/data/test-22-*
    
  • 文件损坏:如果日志里提到segment文件相关错误,先停掉这个Broker,备份对应分区的文件,然后删除疑似损坏的segment文件,重启Broker后看能不能重新同步。

3. 手动终止并重新发起重分配任务

如果重分配任务一直卡着不动,别死等,手动取消任务再重新来:

  • 先获取当前的重分配任务(要是没保存原来的配置文件):
    kafka-reassign-partitions.sh --bootstrap-server <你的Kafka地址:端口> --describe
    
  • 把卡住的test-22分区从任务里移除,或者生成一个空的重分配JSON文件,执行取消命令:
    kafka-reassign-partitions.sh --bootstrap-server <你的Kafka地址:端口> --reassignment-json-file <修改后的空任务文件> --execute
    
  • 等集群稳定后,针对test-22分区单独发起重分配,确保目标Broker状态正常后再执行命令。

4. 检查版本兼容性

这种莫名其妙的UnknownServerException有时候是版本不匹配导致的:

  • 确认所有Broker的Kafka版本完全一致,别有的是2.8,有的是3.0。
  • 确保你用的kafka-reassign-partitions.sh工具和Broker版本相同,跨版本执行工具很容易出问题。

5. 强制切换Leader并同步副本(谨慎操作)

如果以上方法都没用,可以尝试手动切换Leader到健康的副本,再触发同步:

  • 先查看test-22分区的Leader和副本分布:
    kafka-topics.sh --bootstrap-server <你的Kafka地址:端口> --describe --topic test
    
  • 如果有其他健康的副本,切换Leader到这个副本:
    kafka-leader-election.sh --bootstrap-server <你的Kafka地址:端口> --topic test --partition 22 --election-type preferred
    
  • 之后重新执行重分配的验证命令,或者单独对这个分区发起重分配。

注意:这个步骤可能会导致分区短暂不可用,一定要在业务低峰期操作,提前做好备份!


内容的提问来源于stack exchange,提问作者ranjeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:08:33