• 停止每台机器上的kafka;
  • 删除kafka存储目录(server.properties文件log.dirs配置,默认为“/tmp/kafka-logs”)全部topic的数据目录;
  • 删除zookeeper上与kafka相关的znode节点;
  • 重启kafka、如果删除topic还在则需要重启zookeeper;
  • 这里以192.168.187.201 node1、192.168.187.202 node2、192.168.187.203 node3三台机器作为kafka的集群。

    注意:kafka版本为kafka_2.11-1.1.1

    1.1 停止每台机器上的kafka

    以root用户分别登录三台机器,使用命令 jps 找出kafka的PID,再使用命令 kill kafka进程。

    节点node1

    节点node2

    节点node3

    1.2 删除kafka存储目录

    在kafka安装目录的config文件夹下server.properties中查看存储目录为:

    删除该目录所有数据:

    1.3 删除zookeeper上与kafka相关的znode节点

    zookeeper上面保存着kafka的所有topic及其消费信息,故需要删除与kafka相关的znode节点:

    进入zookeeper的shell界面:

    查看与kafka相关的znode节点:

    在上面的znode节点中,除了zookeeper作为zk的安全保障措施,其他znode节点都得删除

    1.4 重启kafka

    分别在node1、node2、node3上面执行如下命令启动kafka:

    /opt/app/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/app/kafka_2.11-1.1.1/config/server.properties > /dev/null 2>&1 &

    jps 命令查看node1、node2、node3上面的启动情况:

    最后在查看kafka上面是否还有topic存在:

    可以看到topic及其相关数据已被清空删除

    2. 某一topic数据清空

    查看当前所有topic

    比如目前需要删除test这一topic,目前kafka_2.11-1.1.1以上版本默认delete.topic.enable=true,即是说使用命令

    ./kafka-topics.sh --zookeeper node1:2181 --delete --topic test

    该命令将会在zookeeper中删除与test这一topic相关的znode节点(包括test详细信息、生产数据、消费数据的节点),并在kafka的存储目录/opt/data/kafka/kafka-logs/下把与test这一topic相关的存储数据目录标记为待删除,稍后会真正删除这些待删除的目录,如下:

    使用kafka-topics.sh查看test在zookeeper中相关znode节点信息是否已被删除

    在/opt/data/kafka/kafka-logs目录下查看test相关存储目录是否被标记删除

    在/opt/data/kafka/kafka-logs目录下查看test相关存储目录已被删除

    3. 思考

    kafka全部数据清空步骤比较繁琐,借鉴某一topic数据清空的方式,可以通过使用kafka-topics.sh --delete命令逐个删除所有的topic,达到清空kafka全部topic数据的目的,不足的是topic“__consumer_offsets”无法删除,不过不碍事。

    参考资料:

    https://blog.csdn.net/belalds/article/details/80575751