Kafka 系列 —(35)Kafka Topic 删除流程、分区重分配流程、首选 Leader 选举流程

目录

操作前统一规则(强制)

1.Kafka Topic 删除流程

Step1:确认 Topic 不再被使用

Step2:禁用 Topic 自动创建(生产环境必须)

Step3:执行 Topic 删除

ZK 模式

KRaft 模式

Step4:检查删除状态(是否卡住)

Step5:清理卡住的删除(ZK 模式)

Step6:确认日志文件已被清理

2.Kafka 分区重分配流程(Reassign Partitions)

Step1:准备要迁移的 Topic 列表文件

Step2:生成迁移计划

Step3:执行迁移

Step4:验证是否完成

Step5:注意事项(非常重要)

3.Kafka 首选 Leader 选举流程(Preferred Leader Election)

Step1:生成 election plan(ZK 模式)

Step2:验证 leader 是否恢复均衡

4.常见问题 & 踩坑

Topic 删除失败(卡住)

分区重分配速度慢

重分配后负载不均匀

重分配期间 leader 频繁漂移


操作前统一规则(强制)

无论哪种流程,以下通用原则必须遵守:

  • 务必先确认没有消费者正在读写关键 Topic

  • 务必备份 Topic 元数据

  • 所有操作必须在维护窗口执行(生产)

  • Reassign 与 Leader Election 不可同时执行

  • ZK 模式和 KRaft 模式命令略有差别


1.Kafka Topic 删除流程

Kafka Topic 删除是危险操作,因为会立即删除日志文件且不可恢复。

下面是完整流程(同时包含 ZK 与 KRaft 模式)。


Step1:确认 Topic 不再被使用

kafka-consumer-groups.sh --bootstrap-server kafka1:9092 --all-groups | grep <topic>

如果仍有消费者活跃,先停止服务


Step2:禁用 Topic 自动创建(生产环境必须)

确保:

auto.create.topics.enable=false
delete.topic.enable=true

使用命令检查:

cat server.properties | grep delete.topic.enable

如未开启,需重启 Broker 才生效。


Step3:执行 Topic 删除

ZK 模式

kafka-topics.sh \
  --zookeeper zk1:2181 \
  --delete \
  --topic <topic_name>

KRaft 模式

kafka-topics.sh \
  --bootstrap-server kafka1:9092 \
  --delete \
  --topic <topic_name>

Step4:检查删除状态(是否卡住)

kafka-topics.sh --describe --topic <topic> --bootstrap-server kafka1:9092

如果状态长时间卡在:

marked for deletion

原因一般是:

  • 有副本 Offline

  • Broker 未同步删除 ZK/KRaft 元数据


Step5:清理卡住的删除(ZK 模式)

zkCli.sh rmr /brokers/topics/<topic_name>

Step6:确认日志文件已被清理

各 broker 执行:

ls /data/kafka-logs | grep <topic>

2.Kafka 分区重分配流程(Reassign Partitions)

分区重分配用于:

  • 扩容 Broker 时迁移数据

  • 修复热点分区

  • 平衡磁盘空间与 IO

Kafka 提供官方流程:

--generate
--execute
--verify

Step1:准备要迁移的 Topic 列表文件

topics.json:

{
  "topics": [
    {"topic": "iot-events"},
    {"topic": "lock-status"}
  ],
  "version": 1
}

Step2:生成迁移计划

kafka-reassign-partitions.sh \
  --bootstrap-server kafka1:9092 \
  --generate \
  --topics-to-move-json-file topics.json \
  --broker-list "0,1,2,3" > plan.json

生成的 plan.json 类似:

{
  "version":1,
  "partitions":[
    {"topic":"iot-events","partition":0,"replicas":[2,1,3]},
    {"topic":"iot-events","partition":1,"replicas":[0,3,1]}
  ]
}</
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

34号树洞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值