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 ...
随机推荐
- c# MVC5(一) 初步认识以及新建mvc
一:MVC5初始 1:广义MVC(Model--View-Controller): V是界面 : M是数据和逻辑 : C是控制,把M和V链接起来: 是程序设计模式,一种设计理念,可以有效的分离界面和业 ...
- Kubernetes port-forward
命令格式: kubectl port-forward <pod_name> <forward_port> --namespace <namespace> --add ...
- MySQL数据库(一)-- 数据库介绍、MySQL安装、基础SQL语句
一.数据库介绍 1.什么是数据库 数据库即存储数据的仓库 2.为什么要用数据库 (1)用文件存储是和硬盘打交道,是IO操作,所以有效率问题 (2)管理不方便 (3)一个程序不太可能仅运行在同一台电脑上 ...
- 【Spring AOP】Spring AOP之如何通过注解的方式实现各种通知类型的AOP操作进阶篇(3)
一.切入点表达式的各种类型 切入点表达式的作用:限制连接点的匹配(满足时对应的aspect方法会被执行) 1)execution:用于匹配方法执行连接点.Spring AOP用户可能最经常使用exec ...
- Odoo甘特图
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826366.html 甘特图(注意:社区版不支持甘特图!所以不会显示) 水平条状的甘特图通常用于显示项目计 ...
- Flask 中字典数据返回(jsonify)
不多说,直接上代码,flask中的字典数据的处理: from flask import Flask, jsonify app = Flask(__name__, static_folder=" ...
- Mock Server之与被测系统对接(python+flask)
第一步:获取入参与返回结果 先通过postman.jmeter.自己写脚本之类的方式请求我们的mock server,试着获取入参与对应的返回值,这里我用的是robotframework + Requ ...
- python参数传递
1.形式参数:在定义函数时,函数名后面括号中的参数为“形式参数”,也称形参 2.实际参数:在调用一个函数时,函数名后面括号种的参数为“实际参数”,也就是将函数的调用者提供给函数的参数称为实际参数,也称 ...
- 2016 ACM/ICPC亚洲区沈阳站
A B C D E F G H I J K L M O O O $\varnothing$ $\varnothing$ $\varnothing$ $\varnothing$ $\varnothi ...
- Django 1.11 bootstrap样式文件无法加载问题解决
先吐槽一波,多看官方教程,多找对应版本解决方法,多思考!... 在调试模式下面,打开页面无法加载bootstrap.min.css样式,解决思路如下: 查看settings文件INSTALL_APP配 ...