暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka删除Topic,弄不好会失败或发生故障


在 Kafka 中,有时候会删除一个 Topic,很简单的一个操作也许会失败,甚至导致故障,那应该如何更好的删除 Topic 呢?

本文提供一些最佳实践,从中可以理解 Kafka 的一些设计理念。

1:删除 Topic 方法

检查全局属性,查看 delete.topic.enable 是否允许删除 Topic:

$ kafka-configs --zookeeper  --entity-type brokers --entity-default --describe

删除 Topic 很简单:

$ kafka-topics --zookeeper  --delete --topic <topic_name>

2:删除 Topic 可能会遇到的问题

  • • 是否允许删除主体,查看 server.properties
     中的 delete.topic.enable
     属性。
  • • 僵尸 Topic,由于 broker cache 或者元数据清理延迟,导致被删除的 Topic 还会存在,可能会需要重新启动 broker 或者手动从 ZK 中删除对应的元数据。
  • • 权限拒绝,Kafka 引入了 ACL,需要查看用户的角色和权限 kafka-acls.sh --bootstrap-server --list
  • • 消费者如果还在消费 Topic,那么 Topic 删除可能会失败或中断,建议删除 Topic 之前,先优雅的暂停对应的消费者消费。查看 kafka-consumer-groups.sh --bootstrap-server --list
     对应的消费者。
  • • Topic 复制问题导致删除失败,所以需要等所有副本元数据被清除,检查同步问题 kafka-topics.sh --bootstrap-server --describe --topic <topic_name>
  • • 检查下游系统的依赖性,比如程序可能依赖被删除的 Topic,确保它们迁移到新的主体,否则可能导致故障。

3:删除 Topic 最佳实践

  • • 确保没有消费者正在从该待删除 Topic 读取数据,可以创建新 Topic,让消费者切换过去,禁用旧 Topic 的生产者和消费者配置,如果新 Topic 运行正常,则继续。
  • • 在删除 Topic 之前验证权限
  • • 必要时备份数据
  • • 检查数据管道中的依赖关系,再一次确保没有消费者和生产者在处理 Topic
  • • 监控删除过程以确认 Topic 已完全删除

4:安全自动删除 Topic

自动删除流程:

  • • 确保不存在活动的消费者或依赖关系
  • • 必要时保存 Topic 数据
  • • 优雅删除
  • • 日志记录和监控

下面是一个简单的自动删除脚本:

#!/bin/bash

BOOTSTRAP_SERVER="localhost:9092"
TOPICS=("old-topic1" "old-topic2" "deprecated-topic")
for TOPIC in "${TOPICS[@]}"do
    echo "Deleting topic: $TOPIC"
    bin/kafka-topics.sh --bootstrap-server $BOOTSTRAP_SERVER --delete --topic $TOPIC
done

echo "Topic 删除完成!"

非常优雅!


文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论