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

双Broker KRaft集群移除节点后部分主题无法消费问题咨询

Kafka KRaft双Broker集群副本未复制问题排查与解决

问题结论

是的,你的主题未跨Broker创建副本,这直接导致了Broker停机后无法消费的问题。从现象来看,主题仅在单个节点存在数据目录,说明该主题的副本因子实际为1,而非你预期的2。

原因分析

  1. 全局副本因子未配置:你的集群配置中仅设置了offsets.topic.replication.factor=2(仅针对offsets系统主题),但未设置default.replication.factor=2。这意味着创建自定义主题时,若未显式指定副本因子,Kafka会使用默认值1创建单副本主题。
  2. 单副本的可用性缺陷:当主题仅存在单副本时,若该副本所在Broker停机,对应分区将没有可用的Leader节点,消费者无法连接到Leader获取数据,从而出现无法消费的情况。

验证步骤

执行以下命令确认主题的副本配置:

kafka-topics.sh --describe --topic my-topic --bootstrap-server 192.168.56.1:9092

输出中会看到ReplicationFactor: 1,且Replicas和Isr列表仅包含单个节点ID(1或2),可直接验证单副本问题。

解决方法

1. 配置全局默认副本因子

在两个节点的server.properties文件中添加以下配置,确保后续创建的主题默认使用2副本:

default.replication.factor=2

修改后重启两个Broker节点。

2. 为已存在的主题添加副本

步骤1:生成副本分配方案

创建一个JSON文件(例如reassignment.json),内容如下:

{
  "version": 1,
  "partitions": [
    {
      "topic": "my-topic",
      "partition": 0,
      "replicas": [1, 2]
    }
  ]
}

步骤2:执行副本重分配

运行以下命令触发副本同步:

kafka-reassign-partitions.sh --bootstrap-server 192.168.56.1:9092 --reassignment-json-file reassignment.json --execute

步骤3:验证重分配结果

执行命令确认副本同步完成:

kafka-reassign-partitions.sh --bootstrap-server 192.168.56.1:9092 --reassignment-json-file reassignment.json --verify

当输出显示Status: Completed时,说明副本已成功同步到两个Broker。

3. 后续主题创建规范

创建新主题时,显式指定副本因子确保符合预期:

kafka-topics.sh --create --topic new-topic --bootstrap-server 192.168.56.1:9092 --partitions 1 --replication-factor 2

效果验证

完成上述操作后,停止节点2的Broker:

  • 若主题副本已同步到两个节点,Controller会将分区Leader切换到节点1,消费者连接节点1可正常消费消息;
  • 重启节点2后,副本会自动同步节点1的新数据,恢复完整的副本集群。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26