Kafka学习笔记之如何永久删除Kafka的Topic
0x00 问题描述
使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。
0x01 问题复现
1. 登录Kafka集群所在的服务器,创建一个test的topic
[root@cdh1 ~]# kafka-topics --create --zookeeper 192.168.2.13: --replication-factor --partitions --topic test

2.查看新创建的topic
[root@cdh1 ~]# kafka-topics --list --zookeeper 192.168.2.13:

3.通过如下命令删除新建的topic
[root@cdh1 ~]# kafka-topics --delete --zookeeper 192.168.2.13: --topic test

此处显示“Topic test is marked for deletion”
4.尝试重新创建一个test的Topic
[root@cdh1 ~]# kafka-topics --create --zookeeper 192.168.2.13: --replication-factor --partitions --topic test

提示该Topic已存在,说明在第3步操作的删除并没有真正的将Topic删除。
0x02 问题原因
默认情况下Kafka是禁用了删除Topic的操作,所以在执行Topic删除的时候只是将删除的Topic标记为“marked for deletion”状态。可以通过修改Kafka服务的配置参数启用。
0x03 解决方案
4.1 方法1
在kafka服务配置delete.topic.enable=false的情况下,如果需要永久删除topic则需要做如下操作:
#1 通过kafka命令删除相应的topic
#2 在zookeeper中删除相应的topic
#3 在topic所在的broker节点上删除topic的log数据
操作如下:
1.查看topic的描述信息,命令如下
[root@cdh1 ~]# kafka-topics --describe --zookeeper 192.168.2.13: --topic test

上图标注部分为topic对应的数据存放节点
2.通过kafka命令删除,命令如下:
[root@cdh1 ~]# kafka-topics --delete --zookeeper 192.168.2.13: --topic test

3.通过zookeeper客户端删除topic,命令如下
[root@cdh1 ~]# ./zookeeper-shell.sh 192.168.2.13:2181
[root@cdh1 ~]# ls /brokers/topics [root@cdh1 ~]# rmr /brokers/topics/test
注:标红部分为topic的名称

4.登录到第1步中列出的对应节点的topic的log数据目录,此处我们Kafka的log.dirs目录配置为/var/local/kakfa,执行命令
[root@cdh1 ~]#$ sudo rm -rf test-/

5.验证是否生效
创建一个名称为“test”的Topic,可以正常创建

注意:此处将topic为test的日志目录(/var/local/kafka/test-0)删除后,新创建的topic为test的日志目录不存在,重启Kafka服务后正常,目录能正常显示。
4.2方法2
在Kafka服务已配置delete.topic.enable=true的情况下,永久删除topic需要做如下操作:
# 使用kafka命令删除topic
操作如下:
- 删除前数据查看:
[root@cdh1 ~]#$ kafka-topics --describe --zookeeper 192.168.2.13:2181 --topic test

各个数据节点的信息:



Zookeeper信息:

2.通过kafka命令删除需要删除的topic,命令如下
[root@cdh1 ~]#$ kafka-topics --delete --zookeeper 192.168.2.13: --topic test

3.查看Zookeeper客户端topic信息
[zk: ip-172-31-1-175.ap-southeast-1.compute.internal:2181(CONNECTED) 9] ls /brokers/topics

4.查看brober节点上topic的日志数据


5.删除后成功后,验证是否能创建名称为test的Topic

注意:
如果Kafka服务配置了delete.topic.enable=true,直接通过命令行删除,未能删除Topic则可以通过zookeeper-client来进行删除。
如果Kafka服务未配置delete.topic.enable=true,直接通过delete命令删除topic,删除时只会将topic标记为“marked for deletion”,然后通过zookeeper-client进行删除是不会删除topic的data.log数据目录的,需要将相应的broker服务器上的data.log目录下相应的topic目录删除,data.log目录获取,可以通过CM界面查看:

建议:Kafka服务开启delete.topic.enable=true,开启方式如下:

开启后需要重启Kafka服务。
参考
Kafka学习笔记之如何永久删除Kafka的Topic的更多相关文章
- 大数据 -- kafka学习笔记:知识点整理(部分转载)
一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...
- kafka学习笔记(一)消息队列和kafka入门
概述 学习和使用kafka不知不觉已经将近5年了,觉得应该总结整理一下之前的知识更好,所以决定写一系列kafka学习笔记,在总结的基础上希望自己的知识更上一层楼.写的不对的地方请大家不吝指正,感激万分 ...
- Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer
Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer: 启动Zookeeper 启动Kafka0.11 创建一个新的Topic: ./kafk ...
- Kafka学习之(六)搭建kafka集群
想要搭建kafka集群,必须具备zookeeper集群,关于zookeeper集群的搭建,在Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建博客有说明.需要具备两台以上装有zook ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- Kafka学习笔记-如何保证高可用
一.术语 1.1 Broker Kafka 集群包含一个或多个服务器,服务器节点称为broker. broker存储topic的数据. 如果某topic有N个partition,集群有N个broker ...
- [Big Data - Kafka] kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- Kafka学习笔记之Kafka背景及架构介绍
0x00 概述 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比.并介绍了Kafka的架构,Producer消息路由,Consumer Group以及由其实现的不 ...
- kafka学习笔记(二)——基础入门
1.集群规划 从官网下载jar包 http://kafka.apache.org/downloads.html,我选择的是kafka_2.11-0.11.0.0.tgz版本 规划一下集群环境先~ ha ...
随机推荐
- MySol序
1.mysql是基于C/S端的服务器软件 mysql服务端: server端开启,对文件的增删改查 , musql客户端::连接S端, 发送指令 isnert into t1 values(1); 2 ...
- 安装Visual Studio 时窗口闪过就退出
双击安装文件,窗口闪了下就退出了. 解决方法:控制面板 ———程序——程序和功能——打开或关闭Windows功能——关闭NET相关框架. 然后再次安装即可. 参考文献: VS安装程序一闪而过
- 使用WIFI网卡的AP功能
前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式.本篇博客就研究使wifi 无线网卡工作于AP模式.使用一个应用程序hostapd,关于它的介绍可以去此网站https://w ...
- 使用BCP从Sybase远程数据库中导出数据
1.在本机安装Sybase ASE 15,我装的开发版全套,懒得去仔细看需要哪个了 2.在Sybase安装目录里找到ini\sql.ini,在里面添加数据源例如: [MYDS] master=NLWN ...
- 05-C#笔记-基本变量
1. 不支持括号初始化: 2. 支持强制类型转化: 3.运算规则同C++ 参考: http://www.runoob.com/csharp/csharp-variables.html
- PATB1009说反话
这里有一点需要注意的就是,PAT里面是禁用gets函数的,所以要换成一个替代函数 那就是下面这个: //这个是定义一个字符串数组 char str[90]; //需要被替代的函数 gets(str) ...
- 深入js系列-类型(对象)
开篇 值的传递方式 1.值传递 表示传递过程中复制了值 2.引用传递 表示传递过程中传递的是值的引用 js的传递方式 值传递 看下面的例子 // 这里值传递很容易理解 var a = 1 var b ...
- Redis有效时间设置及时间过期处理
本文对redis的过期处理机制做个简单的概述,让大家有个基本的认识. Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间.作为一个缓存数据库,这是非常实用的.如我 ...
- ros ap 的无线中继
https://wiki.mikrotik.com/wiki/Manual:Interface/Wireless#Repeater Wireless repeater will allow to re ...
- AppDomin学习与分享
最近学习并分享了appdomin的一些东西,以前没怎么记录过,现在记录一下吧2016-03-17 什么是AppDomin •全称:Application Domin(应用程序域) •定义:AppDom ...